collections.sort方法只用于List类型的集合?

朋友们,我是Java-Collection的新手。 我想问一下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用于唯一元素。 但有没有办法对这个系列进行排序?

该错误是因为Collections类仅支持List。

 public static > void sort(List list) 

要对您的collections进行排序,您可以尝试以下方法:

 Collection collection=new HashSet(); collection.add("zebra"); collection.add("frog"); collection.add("bison"); collection.add("puma"); ArrayList temp = new ArrayList(collection); Collections.sort(temp); collection = new HashSet(temp); 

希望这可以帮助。

Collections.sort方法需要一个实现List接口的集合。 这是有道理的,因为列表具有已定义的序列。 换句话说,您的程序可以完全控制列表中的内容顺序。

与列表不同,集合可以是无序的 ,也可以指定自己的特定排序 。 这就是为什么尝试对Set进行排序没有意义:定义set集合中项目的顺序是集合,而不是程序。 您的程序可以提供自定义排序的逻辑,但您不能使用现有的集合,并从外部强制对其项目执行不同的顺序。

如果要按排序顺序获取集合集合中的所有项目,请将集合复制到数组列表中,然后对结果进行排序。

是的, Collections.sort方法仅适用于列表。

您不能对HashSet排序,但TreeSet会在您添加项目时自动排序, LinkedHashSet按插入顺序排序。

没有。根据定义,没有办法对HashSet进行排序。 您可以使用TreeSet而不是’。

我对这些问题的第一步是查看Java的文档,这将有助于您理解和调试事物。

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html

如果你看一下sort方法,那就是期待一个List。

  sort(List list) 

它有另一个覆盖版本,但这也需要一个列表,以及一个比较器。

  sort(List list, Comparator c) 

这就是您收到错误的原因。 没有为sort(HashSet)定义的方法

Collections的sort(List list)是期望List类型的原始方法。 但是为了排序Set基本上我们使用TreeSet,它分别通过Comparator和Comparable接口的compare()compareTo()方法对元素进行排序。

Java集合具有不同的语义。

  • List是一组对象,可以包括定义顺序的等于或甚至相同的元素;

  • Set是一组对象,不包含相同和相同的元素,并且不指定顺序;

  • SortedSet与set相同,除了它定义元素顺序 – 它们按compareTo()或比较器确定的顺序存储;

因此,排序有意义的唯一类型的集合是List