如果你反转按升序排序的对象列表,你会得到降序吗?

2 java sorting

考虑使用PojoObject 的以下列表:

List<Pojo> list = new ArrayList<>();
....
class Pojo {
    private int field1;
    private int field2;
    ...
}
Run Code Online (Sandbox Code Playgroud)

注意: Pojo可以有两个以上的字段

Pojo-s按升序排序我的列表:

Collections.sort(list, new Comparator<Pojo>() {

    @Override
    public int compare(Pojo o1, Pojo o2) {
        int fieldCompareTo = compare(o1.field1, o2.field1);

            if (fieldCompareTo == 0) {
                fieldCompareTo = compare(o1.field2, o2.field2);

            }
            return fieldCompareTo;
        }
    });

private static int compare(int a, int b) {
    return a < b ? -1
         : a > b ? 1
         : 0;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我将按升序排序列表.

我的问题是:如果我撤销列表,我会降序吗?

我只是打电话 Collections.reverse(list)

And*_*eas 10

是的,反转列表(按升序排序)将为您提供按降序排序的列表.

但是,它可能不会给您与按降序排序列表相同的结果.

这是因为Collections.sort()保证稳定,即由于排序而不会重新排序相等的元素.

如果您的列表具有多个对象,根据它们Comparator是"相等",但不完全相同(即可以区分),则反转列表将颠倒它们的顺序,但按降序排序将使它们按顺序排列.

例如:假设你有名称的列表:John Doe,Jane Smith,Jim Doe

如果您只按姓氏排序,John Doe并且Jim Doe相同,并将保持该顺序.

因此,升序排序为您提供:John Doe,Jim Doe,Jane Smith
倒车,让你:Jane Smith,Jim Doe,John Doe

这是按姓氏递减的顺序,但它与按降序排序列表不同.

一个稳定的降序排序为您提供:Jane Smith,John Doe,Jim Doe

当然,如果根据不存在两个相等的元素,则按Comparator升序排序的列表的反转与按列表递减排序完全相同.

  • @JoseDaniels:有关稳定和不稳定排序之间差异的简单解释,请参阅/sf/answers/581848991/. (2认同)