Ответ
Нет, напрямую изменить данные в иммутабельной (неизменяемой) коллекции нельзя. Любая попытка модификации (добавление, удаление, изменение элемента) выбросит UnsupportedOperationException.
Почему? Иммутабельность — это гарантия, что состояние объекта не изменится после создания. Это ключевое свойство для потокобезопасности и предсказуемости.
Пример с обёрткой Collections.unmodifiableList:
List<String> mutableList = new ArrayList<>(Arrays.asList("a", "b"));
List<String> unmodifiableList = Collections.unmodifiableList(mutableList);
unmodifiableList.add("c"); // UnsupportedOperationException
Важно: Обёртка unmodifiableList лишь предоставляет неизменяемое представление. Если изменить исходную коллекцию (mutableList), это изменение будет видно через unmodifiableList.
Пример с полностью иммутабельной коллекцией (Java 9+):
List<String> trulyImmutableList = List.of("a", "b");
trulyImmutableList.add("c"); // UnsupportedOperationException
trulyImmutableList.set(0, "x"); // UnsupportedOperationException
Коллекции, созданные через List.of(), Set.of(), Map.of(), являются полностью неизменяемыми, включая их элементы (для ссылочных типов неизменна ссылка, а не состояние объекта).