下列的几个reverse
你能分清楚吗?
1 | Comparator.reversed(); |
来看看源码:
Comparator.reversed()
:1
2default Comparator<T> reversed() {
return Collections.reverseOrder(this);返回一个比较器,强制该比较器的相反顺序。
Comparator.reverseOrder
:1
2
3public static <T extends Comparable<? super T>> Comparator<T> reverseOrder() {
return Collections.reverseOrder();
}返回一个与 自然排序相反的比较器。
Collections.reverse()
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20public static void reverse(List<?> list) {
int size = list.size();
if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {
for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--)
swap(list, i, j);
} else {
ListIterator fwd = list.listIterator();
ListIterator rev = list.listIterator(size);
for (int i=0, mid=list.size()>>1; i<mid; i++) {
Object tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);
}
}
}
private static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));
}此方法反转指定列表中元素的顺序。
Collections.reverseOrder()
:1
2
3
4
5
6
7
8
9
10
11
12
13public static <T> Comparator<T> reverseOrder(Comparator<T> cmp) {
if (cmp == null) {
return (Comparator<T>) ReverseComparator.REVERSE_ORDER;
} else if (cmp == ReverseComparator.REVERSE_ORDER) {
return (Comparator<T>) Comparators.NaturalOrderComparator.INSTANCE;
} else if (cmp == Comparators.NaturalOrderComparator.INSTANCE) {
return (Comparator<T>) ReverseComparator.REVERSE_ORDER;
} else if (cmp instanceof ReverseComparator2) {
return ((ReverseComparator2<T>) cmp).cmp;
} else {
return new ReverseComparator2<>(cmp);
}
}此方法返回一个比较器,它强制指定比较器的反向排序。当不指定比较器的时候,返回
ReverseComparator.REVERSE_ORDER
。那顺便看下ReverseComparator
的实现:
1 | private static class ReverseComparator |
可见ReverseComparator.REVERSE_ORDER
排序的顺序与自然排序刚好相反。
总结:
Comparator.reversed()
: 无参数。底层调用Collections.reverseOrder(this)
。返回一个与调用者比较器相反顺序的新的比较器。Comparator.reverseOrder()
: 无参数。底层调用Collections.reverseOrder()
。返回一个与自然排序相反的比较器。Collections.reverse()
: 接受一个List类型参数,反转该List。无返回值。Collections.reverseOrder()
: 无参调用时,返回一个与自然排序相反的比较器;有参调用时,返回与参数相反的比较器。
参考:
Java Comparator使用指南 —- 看这一篇就够了
Java 8 新特性】Java Comparator.reverseOrder | 倒序排序-静态方法
深入学习java源码之Comparator.reverseOrder()与Comparator.compare ()
Java.util.Collections 类
原文链接: https://xqtony.github.io/2023/05/26/reverses/
版权声明: 转载请注明出处.