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

Rol*_*all 7 java collections list set

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

ars*_*jii 9

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

NavigableSet基于a 的实现TreeMap.元素按照它们的自然顺序排序,或者根据Comparator设置的创建时间提供,具体取决于使用的构造函数.

或者LinkedHashSet:

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


faf*_*aff 8

根据定义,Set没有订单.

  • 说一组不一定有订单可能更合适.有一些类型的集合有订单(例如,TreeSet) (3认同)

fge*_*fge 5

A Set不是List.虽然List按合同规定,应该保留插入顺序(否则,这样的方法.get(someindex)没有任何意义),这不是a的情况Set.你没有办法在一个特定的索引中获取一个元素Set!你也没有方法插入特定的位置等.

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

例如:

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

如果您对a进行了排序LinkedHashSet,则会破坏其插入顺序保证!