使用Pojo
对象考虑以下列表:
List<Pojo> list = new ArrayList<>();
....
class Pojo {
private int field1;
private int field2;
...
}
注意: 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;
}
这里我将按升序排序列表。
我的问题是:如果我撤销列表,我会降序吗?
我只是打电话给Collections.reverse(list)
答案 0 :(得分:10)
是的,撤消按升序排序的列表将为您提供按降序排序的列表。
但是,它可能不会给您提供与按降序排序列表相同的结果。
这是因为Collections.sort()
保证稳定,即等级元素不会因排序而重新排序。
如果您的列表有多个对象,那么根据Comparator
是&#34;等于&#34;,但不完全相同(即可以区分),反转列表将颠倒它们的顺序,但是按降序排序将使它们按顺序排列。
示例:假设您有一个名单列表: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
没有两个相等的元素,则反向按升序排序的列表与对列表降序进行排序完全相同。
答案 1 :(得分:2)
调用Collections.reverse(list)
将反转列表,因为它存在于当前状态。例如,如果您的列表为[4,1,3,2]
,并且您致电reverse()
,则该列表将变为[2,3,1,4]
。它不会反转它们的自然顺序(除非列表已经按其自然顺序排列)。
为了让您的列表按自然顺序排列,您需要执行以下操作:
Collections.sort(list);
Collections.reverse(list);