Как работает метод Collections.sort() в Java?

«Как работает метод Collections.sort() в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Collections.sort() — это утилитарный статический метод класса java.util.Collections для сортировки элементов в списках, реализующих интерфейс List. Начиная с Java 8, он использует гибридный алгоритм TimSort (адаптированный MergeSort), который гарантирует:

  • Стабильность — равные элементы не меняют свой относительный порядок.
  • Производительность — временная сложность O(n log n) в среднем и худшем случае.
  • Адаптивность — эффективно работает с частично отсортированными данными.

Способы сортировки:

  1. Естественный порядок (Natural Ordering): Элементы должны реализовывать интерфейс Comparable<T>.

    List<Integer> numbers = Arrays.asList(5, 1, 9);
    Collections.sort(numbers); // Список изменяется на месте
    System.out.println(numbers); // [1, 5, 9]
  2. С помощью Comparator: Позволяет задать произвольный порядок сортировки.

    List<String> words = Arrays.asList("banana", "apple", "cherry");
    // Сортировка по длине строки
    Collections.sort(words, Comparator.comparingInt(String::length));
    System.out.println(words); // [apple, banana, cherry]

Ключевые особенности:

  • Работает только с List (не применим к Set или Map напрямую).
  • Модифицирует исходный список, а не возвращает новый.
  • В Java 8+ для списков предпочтительнее использовать метод List.sort(Comparator).
  • Для массивов используйте Arrays.sort().