gpt4 book ai didi

java - 当用于比较对象的所选字段相等时,Java 如何决定对具有多个字段的对象列表进行排序?

转载 作者:行者123 更新时间:2023-12-04 00:52:42 25 4
gpt4 key购买 nike

我有一个名为 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() :

For ordered streams, the sort is stable. For unordered streams, no stability guarantees are made.

List 上的流是 ordered , 这意味着 stable使用排序算法。稳定排序保证相等的元素不会被交换。比较相等的元素以与起始列表中相同的相对顺序保留。

标准库中的所有排序方法都有类似的保证:

  • Collections.sort()

  • Arrays.sort()

  • Arrays.parallelSort()

    This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort.

    ...

    The documentation for the methods contained in this class includes briefs description of the implementations. Such descriptions should be regarded as implementation notes, rather than parts of the specification. Implementors should feel free to substitute other algorithms, so long as the specification itself is adhered to. (For example, the algorithm used by sort(Object[]) does not have to be a MergeSort, but it does have to be stable.)

  • List.sort()

    Implementation Note:
    This implementation is a stable, adaptive, iterative mergesort...

关于java - 当用于比较对象的所选字段相等时,Java 如何决定对具有多个字段的对象列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65263483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com