为什么Collections.sort()
只适用于List
s而不适用于Set
s?有什么特别的原因吗?
5 回答
大多数(但不是全部)Set
实现没有顺序的概念,因此Collections.sort
不支持它们作为一个整体。如果你想要一个具有顺序概念的集合,你可以使用类似 a 的东西TreeSet
:
NavigableSet
基于TreeMap
. _ 元素使用其自然排序或Comparator
在集合创建时提供的排序,具体取决于使用的构造函数。
接口的哈希表和链表实现
Set
,具有可预测的迭代顺序。此实现与HashSe
t 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,即元素插入集合的顺序(插入顺序)
根据定义,集合没有顺序。
ASet
不是List
. 虽然List
根据合同 a 应该保留插入顺序(否则,诸如此类的方法.get(someindex)
将没有任何意义),但 a 并非如此Set
。您无法在 a 中的特定索引处获取元素Set
!您也没有在特定位置插入的方法等。
更具体地说,的顺序Set
是未定义的;但是,的实现Set
可以添加排序约束。
例如:
LinkedHashSet
保留插入顺序;TreeSet
保持其元素的自然顺序,要么是因为它的元素实现了Comparable
,要么是因为你提供了一个Comparator
.
如果你对 a 排序LinkedHashSet
,你会破坏它的插入顺序保证!
没有订购一套。您可以使用SortedSet。或者您可以从集合中创建一个列表并对其进行排序。
List 是一组有序的元素,而 Set 不是,这意味着 Set 元素都没有任何序列号。所以你不能排序。