【问题标题】:Does Collections.sort respect the index among the tied inputted elements? (Sorting Stability)Collections.sort 是否尊重绑定输入元素之间的索引? (排序稳定性)
【发布时间】:2025-11-30 02:40:01
【问题描述】:

例如,如果我按Individual::Age 对一个有 10 人的List<Individual> 进行排序,然后输入 Alice(3)、Bob(5) 和 Charles(3),那么输出会是 Alice(3)、Charles( 3)、Bob(5) 或者 Alice 和 Charles 是否有可能以与输入不同的顺序输出的方式交换?

编辑:
似乎他的财产有一个专有名称:https://en.wikipedia.org/wiki/Sorting_algorithm#Stability

【问题讨论】:

    标签: java sorting collections comparator


    【解决方案1】:

    引用the documentation

    这种排序保证稳定:相同的元素不会因为排序而重新排序。

    为此,Alice 和 Charles 是平等的(因为他们的年龄相同)。调用sort 保证保持它们的相对顺序,并且Alice 会出现在Charles 面前。

    【讨论】:

    • 哇,我在阅读 main Comparator javadoc 时错过了它非常感谢和抱歉显而易见的!!!!。
    • @user1352530:如果他的回答对您来说是正确的,请接受(使用“复选标记”或“打勾”)。 :-)
    • 我在等待 SO 让我接受它。我去抽那 7 分钟... :)))
    【解决方案2】:

    这取决于排序算法的稳定性:见wikipedia page

    取决于 JDK 实现

    【讨论】:

      【解决方案3】:

      这完全取决于我们如何实现比较器(或可比较)类。如果您只比较年龄,那么顺序将与插入的顺序相同(作为使用合并排序的列表),或者如果您同时比较年龄和姓名,那么这将按字典顺序排列。

      【讨论】:

      • 我认为你没有理解这个问题。
      • 我可以知道为什么@Codebender
      • 我的比较器是 Comparator.comparingInt(Individual::getAge)
      最近更新 更多