我有一个名为Instance的对象,具有2个字段,这些对象是表示数据集中各个列(例如年龄,性别,类别等)的一组功能(这是另一个对象);及其值(即数字)。我还实现了一个自定义比较器,可以根据实例的特定功能对这些对象的列表进行排序,如下所示:
Comparator<Instance> comparator = Comparator.comparing(c -> c.get(feature));
Instance[] sorted = instList.stream().sorted(comparator).toArray(Instance[]::new);
现在,此代码可以正常工作,但是,在许多情况下,我要排序的功能与另一个实例具有相同的值。在这种情况下,Java如何确定如何继续对列表进行排序?
从Java API引用以下内容Stream.sorted()
:
对于有序流,排序是稳定的。对于无序流,不保证稳定性。
上的流List
是有序的,这意味着使用了稳定的排序算法。稳定的排序可确保不会交换相等的元素。比较相等的元素将以与起始列表相同的相对顺序保留。
标准库中的所有排序方法都具有类似的保证:
保证这种排序是稳定的:相等的元素不会由于排序而重新排序。
...
此类中包含的方法的文档包括对实现的简要说明。此类描述应被视为实现说明,而不是规范的一部分。只要遵守规范本身,实现者就可以随意替换其他算法。(例如,所使用的算法
sort(Object[])
不必是MergeSort,但必须是稳定的。)
实施注意:
此实施是一个稳定的,自适应的,迭代的合并排序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句