List接口中,sort方法时这样定义的:
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
看一个例子
List<Integer> highs = new ArrayList<>(n);
highs.sort((h1, h2) -> {
int diff1 = Math.abs(h1 - 100);
int diff2 = Math.abs(h2 - 100);
return diff1 == diff2 ? h1 - h2 : diff1 - diff2;
});
这个排序的意思是将h1和h2到100的距离进行比较,距离相等,两数小的在前(如果改为 diff1 == diff2 ? h2 - h1 : diff1 - diff2; 则两数大的在前);距离不相等,距离小的在前