7

为什么Collections.sort()只适用于Lists而不适用于Sets?有什么特别的原因吗?

4

5 回答 5

9

大多数(但不是全部Set实现没有顺序的概念,因此Collections.sort不支持它们作为一个整体。如果你想要一个具有顺序概念的集合,你可以使用类似 a 的东西TreeSet

NavigableSet基于TreeMap. _ 元素使用其自然排序Comparator在集合创建时提供的排序,具体取决于使用的构造函数。

LinkedHashSet

接口的哈希表和链表实现Set,具有可预测的迭代顺序。此实现与HashSet 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,即元素插入集合的顺序(插入顺序

于 2013-06-26T16:51:15.343 回答
8

根据定义,集合没有顺序。

于 2013-06-26T16:48:28.157 回答
5

ASet不是List. 虽然List根据合同 a 应该保留插入顺序(否则,诸如此类的方法.get(someindex)将没有任何意义),但 a 并非如此Set。您无法在 a 中的特定索引处获取元素Set!您也没有在特定位置插入的方法等。

更具体地说,的顺序Set是未定义的;但是,的实现Set可以添加排序约束。

例如:

  • LinkedHashSet保留插入顺序;
  • TreeSet保持其元素的自然顺序,要么是因为它的元素实现了Comparable,要么是因为你提供了一个Comparator.

如果你对 a 排序LinkedHashSet,你会破坏它的插入顺序保证!

于 2013-06-26T17:04:21.813 回答
1

没有订购一套。您可以使用SortedSet。或者您可以从集合中创建一个列表并对其进行排序。

于 2013-06-26T16:50:40.313 回答
0

List 是一组有序的元素,而 Set 不是,这意味着 Set 元素都没有任何序列号。所以你不能排序。

于 2013-06-26T16:49:49.490 回答