对集合的值进行排序
我正在尝试对集合中的元素进行排序,但到目前为止还无法做到。 这是我正在尝试执行的代码
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
I am trying to sort elements of a set but unable to do so far.
here is my code which i am trying to do
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;
}
but this or other way is not working since its all time giving me the same order in which they have been filled
12,15,5
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
使用 SortedSet(TreeSet 是默认的):
不需要额外的排序代码。
哦,我看到你想要不同的排序顺序。为 TreeSet 提供比较器:
现在您的 TreeSet 将以数字顺序对字符串进行排序(这意味着如果您提供非数字字符串,它将抛出异常)
参考:
SortedSet
接口TreeSet
< /a>比较器
Use a SortedSet (TreeSet is the default one):
No extra sorting code needed.
Oh, I see you want a different sort order. Supply a Comparator to the TreeSet:
Now your TreeSet will sort Strings in numeric order (which implies that it will throw exceptions if you supply non-numeric strings)
Reference:
SortedSet
interfaceTreeSet
Comparator
如果对字符串
"12"
、"15"
和"5"
进行排序,则"5"
排在最后因为"5"
>“1”
。即字符串的自然排序并不按您期望的方式工作。如果您想在列表中存储字符串但按数字对它们进行排序,那么您将需要使用一个比较器来处理这个问题。例如
另外,我认为您在
Collection
类型之间有点混淆。HashSet
和HashMap
是不同的东西。If you sort the strings
"12"
,"15"
and"5"
then"5"
comes last because"5"
>"1"
. i.e. the natural ordering of Strings doesn't work the way you expect.If you want to store strings in your list but sort them numerically then you will need to use a comparator that handles this. e.g.
Also, I think you are getting slightly mixed up between
Collection
types. AHashSet
and aHashMap
are different things.您正在使用默认比较器对
Set
进行排序。在本例中,这意味着字典顺序。按字典顺序,"12"
位于"15"
之前,位于"5"
之前。使用
Set
:或者使用不同的比较器:
You're using the default comparator to sort a
Set<String>
. In this case, that means lexicographic order. Lexicographically,"12"
comes before"15"
, comes before"5"
.Either use a
Set<Integer>
:Or use a different comparator:
使用
Integer
包装类而不是 String,因为它通过实现Comparable
为您完成艰苦的工作。然后 java.util.Collections.sort(list); 就可以了。Use the
Integer
wrapper class instead of String because it is doing the hard work for you by implementingComparable<Integer>
. Thenjava.util.Collections.sort(list);
would do the trick.字符串按字典顺序排序。您所看到的行为是正确的。
定义您自己的比较器来对字符串进行排序 不管你喜欢什么。
如果您将集合更改为 Integer 而不是使用 String,它也会按照您期望的方式工作(5 作为第一个元素)。
Strings are sorted lexicographically. The behavior you're seeing is correct.
Define your own comparator to sort the strings however you prefer.
It would also work the way you're expecting (5 as the first element) if you changed your collections to Integer instead of using String.
您需要将 Comparator 实例传递给排序方法,否则元素将按其自然顺序排序。
有关详细信息,请检查 Collections.sort(列表,比较器)
You need to pass in a Comparator instance to the sort method otherwise the elements will be sorted in their natural order.
For more information check Collections.sort(List, Comparator)