Geo*_*cis 3 java sorting comparator
我有一个名为 Instance 的对象,它有 2 个字段,一个特征数组(这是另一个对象),表示数据集中的列,例如年龄、性别、类别等;和它们的值(即一个数字)。我还实现了一个自定义比较器,它可以根据实例的特定功能对这些对象的列表进行排序,如下所示:
Comparator<Instance> comparator = Comparator.comparing(c -> c.get(feature));
Instance[] sorted = instList.stream().sorted(comparator).toArray(Instance[]::new);
Run Code Online (Sandbox Code Playgroud)
现在,这段代码工作正常,但是,在很多情况下,我排序的特征与另一个实例具有相同的值。在这种情况下,Java如何决定如何继续对列表进行排序?
引用 Java API 的内容Stream.sorted()
:
对于有序流,排序是稳定的。对于无序流,没有稳定性保证。
a 上的流List
是有序的,这意味着使用了稳定的排序算法。稳定的排序保证相等的元素不会被交换。比较相等的元素的相对顺序与起始列表中的相同。
标准库中的所有排序方法都有类似的保证:
这种排序保证是稳定的:相等的元素不会因排序而重新排序。
...
此类中包含的方法的文档包括实现的简要说明。此类描述应被视为实现说明,而不是规范的一部分。只要遵守规范本身,实现者应该可以随意替换其他算法。(例如, 使用的算法
sort(Object[])
不一定是 MergeSort,但它必须是stable。)
实现说明:
这个实现是一个稳定的、自适应的、迭代的归并排序...