Вы смотрите старую версию JDK. По крайней мере, с тех пор, как JDK 1.8.0_162 Collections.sort()
вызывает List
s sort(Comparator<? super E> c)
. И хотя реализация по умолчанию создает массив из List
и сортирует этот массив, ArrayList
переопределяет эту реализацию по умолчанию и сортирует резервный массив напрямую.
Collections
* sort
:
public static <T extends Comparable<? super T>> void sort(List<T> list) {
list.sort(null);
}
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);
}
}
ArrayList
sort
:
public void sort(Comparator<? super E> c) {
final int expectedModCount = modCount;
Arrays.sort((E[]) elementData, 0, size, c);
if (modCount != expectedModCount) {
throw new ConcurrentModificationException();
}
modCount++;
}
Другими словами, это было исправлено в версиях JDK, более новых, чем та, на которую вы смотрите.
Вы можете посмотреть источник здесь (благодаря ссылке eckes).