Класс Collections

Базовый Java
≈ 2 мин чтения

Collection и Collections — не одно и то же

Collection — интерфейс в иерархии коллекций, а Collections — служебный класс со статическими методами. Он не представляет отдельный контейнер: его методы принимают уже существующие коллекции и выполняют над ними готовые операции.

Готовые алгоритмы

В Collections есть операции, которые иначе пришлось бы писать вручную: разворот списка, перемешивание, поиск минимального и максимального элемента, частоты значения и другие алгоритмы.

List<Integer> numbers = new ArrayList<>(List.of(3, 1, 2, 1));

Collections.sort(numbers);
Collections.reverse(numbers);

System.out.println(Collections.min(numbers));
System.out.println(Collections.max(numbers));
System.out.println(Collections.frequency(numbers, 1));

Для сортировки списка также есть его собственный метод sort(). Collections.sort() остаётся знакомым и допустимым вариантом, а остальные утилиты класса полезны тогда, когда у самой коллекции нет подходящего метода.

Неизменяемое представление

Методы семейства unmodifiable... создают оболочку, через которую нельзя изменить исходную коллекцию.

List<String> source = new ArrayList<>();
source.add("Java");

List<String> view = Collections.unmodifiableList(source);
source.add("SQL");

System.out.println(view); // [Java, SQL]

Важно, что это именно представление, а не независимая копия. Если исходный список изменяется напрямую, изменение видно и через оболочку. Когда нужен отдельный неизменяемый снимок данных, обычно понятнее создать его через List.copyOf(source).

Когда использовать утилиты

Класс Collections полезен, когда нужная операция относится не к одному конкретному объекту, а к общему алгоритму над коллекцией. Зная интерфейсы коллекций и правила сравнения, ты можешь читать такие вызовы как готовые строительные блоки, а не как «магические» методы стандартной библиотеки.

Не путай неизменяемую оболочку с неизменяемыми данными. Collections.unmodifiableList() запрещает изменение через полученную ссылку, но не блокирует изменения исходного списка через другие ссылки.