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