【问题标题】:What is the difference between an ordered and a sorted collection?有序集合和排序集合有什么区别?
【发布时间】:2010-11-08 05:19:12
【问题描述】:

排序和有序集合之间有什么区别吗?

【问题讨论】:

  • 不要太按字面理解这里的答案。虽然这是一种被广泛理解和认可的定义,但它并不是计算机术语中的实际定义。例如,在 .NET 中,“排序”可枚举的接口称为 IOrderedEnumerable (有趣的是它在 .NET 中不是很一致。在 .NET 中的字典中的“插入顺序”称为 OrderedDictionary,其中一些与说,IndexedDictionary) 相比,believe 是用词不当。是的,在 Java 世界中(主要是在其他地方),它们的意思是你的答案。有关更多信息,请参阅here。
  • 如果某些实现实例命名错误,则没有理由传播其错误。这是一个很好的问题,有很好的答案。使用正确的命名 - 有助于减少所有人的困惑,包括您自己。

标签: java collections


【解决方案1】:

有序集合意味着集合的元素具有特定的顺序。顺序与值无关。 List 就是一个例子。

排序的集合意味着不仅集合有顺序,而且顺序取决于元素的值。 SortedSet 就是一个例子。

相比之下,没有任何顺序的集合可以以任何顺序维护元素。 Set 就是一个例子。

【讨论】:

  • 优先队列是有序集合吗?
  • @overexchange 鉴于上述定义,在大多数情况下,优先级队列将是一个排序集合,因为优先级几乎总是被定义为队列中元素的属性。
  • 如果 SortedSet 继承自 Set 并且与它有 is-a 关系,那么你怎么能说 Set 没有任何顺序
【解决方案2】:

有序集合根据您在集合中放入/移除元素的顺序维护元素的顺序。

已排序的集合根据排序标准对元素进行排序。

【讨论】:

    【解决方案3】:

    Java 使用“有序集合”来表示诸如 List 之类的集合,其中(与 HashSet 不同)集合会记住元素应该处于的顺序。因此可以在特定“位置”将元素添加到集合中按顺序。

    Java 使用“排序集合”来表示一个集合,例如 SortedSet,其中(与 List 不同),迭代器遍历集合的顺序是按照指定的 Comparator 或元素的自然顺序。

    所以区别在于排序是取决于值(“排序”),还是元素具有独立于其值的属性(“排序”)。

    【讨论】:

    • 好答案和 +1 提到“Java”。它的 有点 在大多数地方也是公认的定义,例如 python 中的OrderedDict。但在 .NET 中,“排序”可枚举的接口称为IOrderedEnumerable。所以这取决于。只是说..
    【解决方案4】:

    是的,尽管概念相似。

    List 是一个有序集合:每个元素都有一个索引,它形成了元素的排序,但通常与元素本身的任何属性无关。

    SortedMap 和SortedSet 是已排序的集合,这意味着通过集合的迭代将按照从元素本身派生的顺序进行。例如,如果您有一个SortedSet<String>,则字符串将根据词典排序顺序进行排序。

    有序集合可以排序,但当外部排序与元素的排序顺序相同时,不必排序(例如,在使用Collections.sort() 之后)。排序后的集合总是隐式排序的(即,总是有一个“第一个”元素,只要你不添加另一个更小的元素,它总是相同的)。

    【讨论】:

      【解决方案5】:

      有序集合是跟踪每个元素插入的连续索引的集合。

      排序集合是一个有序集合,当顺序还取决于要插入的元素的值时,在整个使用 Comparable 接口的过程中,该接口为您提供了一种定义排序标准的方法。

      希望对你有帮助。

      【讨论】:

        【解决方案6】:

        排序意味着根据 Comparable 或 Comparator 的实现进行排序。 Ordered 意味着它遵循插入顺序或其他一些一致且已定义的顺序定义,但在其他方面是任意的。

        因此,将根据 String.compareTo 方法对已排序的字符串列表进行排序。列表可能包含以任意顺序插入的字符串列表,但该顺序将始终保持不变。

        当然,Collections 类中有一些方法可以对列表进行排序。

        【讨论】:

          【解决方案7】:

          排序集合通常意味着元素从最小值到最大值排序,反之亦然,具体取决于算法工作的元素的属性。

          对于整数集合,排序可能是从最小数到最大数 对于一个人的集合,可能会根据人的身高或人的体重等来排序。

          说到顺序,通常指的是插入的顺序。排序后可能会改变顺序

          【讨论】:

            【解决方案8】:

            有序集合 vs. 有序集合

            1.排序集合

            排序集合是利用 Java 集合框架提供的排序功能对集合进行排序。在使用 java 比较器从数据库中读取数据之后,排序发生在运行 Hibernate 的 JVM 的内存中。

            如果您的收藏量不大,那么对它进行排序将是一种更有效的方式。 由于它发生在 jvm 内存中,它可能会抛出 Out of Memory 错误。

            2。订单收集

            Order 集合是通过在查询中指定 order-by 子句对集合进行排序,以便在检索时对该集合进行排序。 如果您的收藏非常大,那么对其进行排序将是更有效的方式。与排序集合相比,它的速度更快。

            【讨论】:

              猜你喜欢
              • 2013-11-19
              • 2010-11-05
              • 2020-07-23
              • 2013-11-02
              • 2013-06-18
              • 1970-01-01
              • 2012-09-03
              • 2017-01-18
              • 1970-01-01
              相关资源
              最近更新 更多