设置的sorting值
我正在尝试对一组元素进行sorting,但无法做到这一点。 这是我正在尝试做的代码
public static void main(String [] args){ Set<String> set=new HashSet<String>(); set.add("12"); set.add("15"); set.add("5"); List<String> list=asSortedList(set); } public static <T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) { List<T> list = new ArrayList<T>(c); Collections.sort(list); return list; } 但是这个或其他的方式是不行的,因为它总是给我同样的顺序,他们已经填补了12,15,5
 如果对string"12" , "15"和"5"进行sorting,那么"5"最后会因为"5" > "1" 。 即string的自然顺序不符合您的期望。 
如果你想在你的列表中存储string,但数字sorting,那么你将需要使用比较器来处理这个。 例如
 Collections.sort(list, new Comparator<String>() { public int compare(String o1, String o2) { Integer i1 = Integer.parseInt(o1); Integer i2 = Integer.parseInt(o2); return (i1 > i2 ? -1 : (i1 == i2 ? 0 : 1)); } }); 
 此外,我认为你Collectiontypes之间有点混合。  HashSet和HashMap是不同的东西。 
使用SortedSet(TreeSet是默认的):
 SortedSet<String> set=new TreeSet<String>(); set.add("12"); set.add("15"); set.add("5"); List<String> list=new ArrayList<String>(set); 
没有额外的sorting代码需要。
哦,我看到你想要一个不同的sorting顺序。 为TreeSet提供一个比较器:
 new TreeSet<String>(Comparator.comparing(Integer::valueOf)); 
现在你的TreeSet将按string的顺序sorting(这意味着如果你提供非数字string,它将会抛出exception)
参考:
-   Java教程( 集合跟踪 ):
- 对象sorting
-   SortedSet接口
 
-   Javadocs: TreeSet
-   Javadocs: Comparator
 你使用默认的比较器来sorting一个Set<String> 。 在这种情况下,这意味着词典顺序 。 按字母顺序, "12"在"15"之前,在"5"之前。 
 使用Set<Integer> : 
 Set<Integer> set=new HashSet<Integer>(); set.add(12); set.add(15); set.add(5); 
或者使用不同的比较器:
 Collections.sort(list, new Comparator<String>() { public int compare(String a, String b) { return Integer.parseInt(a) - Integer.parseInt(b); } }); 
 使用Integer包装类而不是String,因为它通过实现Comparable<Integer>为您做了很大的工作。 然后java.util.Collections.sort(list); 会做的伎俩。 
string按字典顺序sorting 。 你看到的行为是正确的。
定义你自己的比较器来sortingstring,但是你喜欢。
如果您将集合更改为Integer,而不是使用String,那么它也会以您期望的方式工作(5作为第一个元素)。
您需要将Comparator实例传递给sorting方法,否则元素将按自然顺序sorting。
有关更多信息,请检查Collections.sort(List,Comparator)