Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java collections.sort方法是否仅用于列表类型的集合?_Java_Collections - Fatal编程技术网

Java collections.sort方法是否仅用于列表类型的集合?

Java 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

朋友们,我不熟悉Java系列。我想询问does
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)

publicstatic
sort(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);