Collections类中定义了一系列的静态方法,其中就包括sort方法(下面为该方法的源码),从这个方法的源码中可以看出,它调用的是list.sort()方法,在该方法中先将list转换成数组,然后调用Arrays.sort()方法。在Arrays.sort()方法中,有一个条件判断(LegacyMergeSort.userRequested),当此条件为true时,调用legacyMergeSort(a, c);若为false则调用TimSort.sort(a, 0, a.length, c, null, 0, 0);通过legacyMergeSort(a, c);源码就可以看出此方法实现的是归并排序,
- Collections.sort()方法源码
1
2
3
4"unchecked", "rawtypes"}) ({
public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
} - list.sort()方法源码
1
2
3
4
5
6
7
8
9
10"unchecked", "rawtypes"}) ({
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);
}
} - Arrays.sort()方法源码
1
2
3
4
5
6
7
8
9
10public static <T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}mergeSort()方法源码,legacyMergeSort()方法将会在未来的版本中被移除。mergeSort()方法中,当待排序数组长度小于7时,使用的是插入排序。
1 | /** To be removed in a future release. */ |