当前位置: 首页 > 知识库问答 >
问题:

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

郭鸿信
2023-03-14

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

共有3个答案

赵超
2023-03-14

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

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

例如:

  • LinkedHashSet保留插入顺序
  • TreeSet保持其元素的自然顺序,这可能是因为其元素实现了Comparable,也可能是因为您提供了Comparator

如果你对一个链接哈希集进行排序,你会破坏它的插入排序保证!

傅啸
2023-03-14

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

吴宏扬
2023-03-14

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

基于< code>TreeMap的< code>NavigableSet实现。根据使用的构造函数,使用元素的自然排序,或者通过在集合创建时提供的< code >比较器对元素进行排序。

或者 LinkedHashSet

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

 类似资料:
  • 下面是我的时间: 为什么,我的意见是一样的,但事实并非如此。 所以从这个例子中开箱很快,对吧?

  • 问题内容: 我们知道快速排序是最快的排序算法。 JDK6 使用合并排序算法而不是快速排序。但是Arrays.sort使用快速排序算法。 Collections.sort使用合并排序而不是快速排序的原因是什么? 问题答案: 极有可能从乔希布洛赫§: 我确实写了这些方法,所以我想我有资格回答。确实没有最佳的排序算法。与mergesort相比,QuickSort有两个主要缺陷: 它不稳定(如parsif

  • 我使用的是JDK-8(x64)。对于<code>数组。sort</code>(原语)我在Java文档中找到了以下内容: 排序算法是弗拉基米尔·雅罗斯拉夫斯基、乔恩·本特利和约书亚·布洛赫的双轴快速排序。' 对于<code>集合。sort(对象)我找到了这个“Timsort”: 这个实现是一个稳定的、自适应的、迭代的合并…这个实现将指定的列表转储到一个数组中,对数组进行排序,并迭代列表,从数组中的相

  • 问题内容: 很抱歉打扰-也许这是一个非常简单的问题- 但由于某些原因,下面的版本无法解析,而带有set的版本可以正常工作。实际上,如果我仅使用set版本并将set替换为list,则会得到: 嵌套异常为org.hibernate.InvalidMappingException:无法从无效映射中解析映射文档 谢谢米莎 问题答案: 你说 而带有set的版本可以正常工作 这是清单DOCTYPE 您可以看到

  • 问题内容: 假设我有这个模型: 现在,如果我想高效地查看相册中的一部分照片。我这样做是这样的: 这只会执行两个查询,这正是我所期望的(一个查询得到相册,然后一个查询,例如“ SELECT * IN photos WHERE photoalbum_id IN()”。 一切都很棒。 但是,如果我这样做: 然后用!进行大量查询!我是在做错什么,还是django不够聪明,以至于它已经获取了所有照片并可以在

  • 所以我想知道,为什么一个PHP网站可以请求任何资源,但是有了JS,很多都因为CORS而被阻止了。有人能给我解释一下吗?