Класс Collections
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() запрещает изменение через полученную ссылку,
но не блокирует изменения исходного списка через другие ссылки.