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 super T> c)
这就是您收到错误的原因。 没有为sort(HashSet)定义的方法
Collections的sort(List
是期望List类型的原始方法。 但是为了排序Set基本上我们使用TreeSet,它分别通过Comparator和Comparable接口的compare()
或compareTo()
方法对元素进行排序。
Java集合具有不同的语义。
-
List
是一组对象,可以包括定义顺序的等于或甚至相同的元素; -
Set
是一组对象,不包含相同和相同的元素,并且不指定顺序; -
SortedSet
与set相同,除了它定义元素顺序 – 它们按compareTo()
或比较器确定的顺序存储;
因此,排序有意义的唯一类型的集合是List
。