为什么Collections.sort()仅适用于列表而不适用于集合?

时间:2013-06-26 16:47:59

标签: java list collections set

为什么Collections.sort()仅适用于List而不适用于Set s?有什么特别的原因吗?

5 个答案:

答案 0 :(得分:8)

根据定义,Set没有订单。

答案 1 :(得分:8)

大多数(但并非所有Set实施都没有订单概念,因此Collections.sort不支持它们作为一个整体。如果您想要一个具有订单概念的集合,您可以使用类似TreeSet

的内容
  

基于NavigableSetTreeMap实施。元素按照natural ordering或在创建时设置的Comparator进行排序,具体取决于使用的构造函数。

LinkedHashSet

  

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元素都没有任何序列号。所以你不能对它进行排序。