Ответ
Неизменяемая (unmodifiable) коллекция — это представление (view) существующей коллекции, которое запрещает операции модификации (add, remove, set). При попытке изменения бросается UnsupportedOperationException.
Важно: Это не копия данных. Если изменить исходную (оборачиваемую) коллекцию, это отразится на неизменяемом представлении.
Способы создания (до Java 9):
List<String> mutableList = new ArrayList<>(Arrays.asList("A", "B", "C"));
// 1. Через Collections.unmodifiableList()
List<String> unmodifiableView = Collections.unmodifiableList(mutableList);
// 2. Из массива (но это всё ещё представление)
List<String> unmodifiableList2 = Collections.unmodifiableList(
new ArrayList<>(Arrays.asList("X", "Y", "Z"))
);
mutableList.add("D"); // Сработает, и 'D' появится в unmodifiableView!
unmodifiableView.add("E"); // Выбросит UnsupportedOperationException
Способы создания (Java 9+): Используются фабричные методы List.of(), Set.of(), Map.of(), которые создают настоящие неизменяемые коллекции (не представления).
List<String> trulyImmutableList = List.of("A", "B", "C");
trulyImmutableList.add("D"); // Всегда UnsupportedOperationException
Когда использовать: Для безопасной передачи внутренних коллекций из класса наружу, чтобы клиентский код не мог их изменить.