Java collections.sort方法是否仅用于列表类型的集合?
朋友们,我不熟悉Java系列。我想询问doesJava collections.sort方法是否仅用于列表类型的集合?,java,collections,Java,Collections,朋友们,我不熟悉Java系列。我想询问doesCollections.sort()方法,该方法仅用于List类型的集合。我无法对以下代码进行排序: Collection collection=new HashSet(); collection.add("zebra"); collection.add("frog"); collection.add("bison"); collection.add("puma"); Collections.sort(collection); //error...w
Collections.sort()
方法,该方法仅用于List
类型的集合。我无法对以下代码进行排序:
Collection collection=new HashSet();
collection.add("zebra");
collection.add("frog");
collection.add("bison");
collection.add("puma");
Collections.sort(collection); //error...why??
我知道
HashSet
用于唯一元素。但是有什么方法可以对集合进行排序吗?是的,集合。sort
方法仅用于列表
您不能对
HashSet
进行排序,但是TreeSet
会在添加项目时自动排序,LinkedHashSet
会按插入顺序排序。否。根据定义,无法对HashSet
进行排序。您可以使用树集
来代替。需要一个实现列表
接口的集合。这是有意义的,因为列表有一个已定义的序列。换句话说,您的程序可以完全控制列表中内容的顺序
与列表不同,集合要么无序,要么指定自己的特定顺序。这就是为什么尝试对集合进行排序没有意义:定义集合集合中项目顺序的是集合,而不是程序。您的程序可以提供定制该顺序的逻辑,但您不能获取现有的集合,并从外部强制对其项目执行不同的顺序
如果您希望以排序的顺序获取集合集合的所有项,请将集合复制到数组列表中,并对结果进行排序。我回答这些问题的第一步是查看Java文档,这将在理解和调试方面帮助您很多
如果您查看sort方法,它需要一个列表
sort(List<T> list)
排序(列表)
它有另一个覆盖版本,但这也需要一个列表和一个比较器
sort(List<T> list, Comparator<? super T> c)
sort(List,ComparatorJava集合具有不同的语义
列表
是一组对象,其中可能包含定义顺序的相等或甚至相同的元素
Set
是一组不包含相同元素且不指定顺序的对象
SortedSet
与set相同,只是它定义了元素顺序-它们按照compareTo()
或comparator确定的顺序存储
因此,排序有意义的唯一收集类型是List
错误是因为Collections类只支持列表
public static <T extends Comparable<? super T>> void sort(List<T> list)
publicstaticsort(List-List)
集合的排序(List-List)
是期望类型List的原始方法。但为了对集合进行排序,我们基本上使用TreeSet,它借助compare()
或compareTo()对元素进行排序
比较器和可比较接口的方法。使用散列集
表示您不关心可能重复的Thank you brother的排序顺序。您的temp
对象确实是一个神奇的代码。在对集合进行散列集之前,对集合进行排序是没有意义的。对于上述sc来说,这是正确的enario.但是,如果使用了SortedSet,则会产生不同。@Ayman当您随后创建SortedSet
时,对集合进行排序也没有意义,因为SortedSet
会维护订单本身,无论您在填充之前是否对值进行排序。
Collection collection=new HashSet();
collection.add("zebra");
collection.add("frog");
collection.add("bison");
collection.add("puma");
ArrayList<String> temp = new ArrayList<String>(collection);
Collections.sort(temp);
collection = new HashSet(temp);