Что верно про неизменяемые и защитные коллекции?
- Чем List.of отличается от Collections.unmodifiableList?
List.of и List.copyOf — настоящие неизменяемые коллекции, null запрещён. Collections.unmodifiableList — представление: через исходную ссылку список по-прежнему меняется. Объекты внутри в обоих случаях остаются изменяемыми.
- List.copyOf (Java 10) — защитная копия, не копирует, если уже неизменяемый
- Изменение неизменяемой коллекции — UnsupportedOperationException
- Stream.toList() (Java 16) тоже неизменяемый
А ещё Для защиты поля — copyOf в конструкторе и геттере
Подробно
Разница между обёрткой и копией практически важна: unmodifiableList запрещает изменения только через себя, а через исходную ссылку список по-прежнему меняется — как средство защиты это ненадёжно, если оригинал кому-то доступен. List.of и List.copyOf создают действительно независимые неизменяемые коллекции; copyOf при этом не копирует повторно, если на вход уже пришла неизменяемая коллекция. И главное ограничение обоих подходов: неизменяем сам контейнер, а не объекты в нём — изменяемый объект внутри неизменяемого списка спокойно меняется.
Что хотят услышать
- Копия против представления.
- Запрет null и поведение при изменении.
- Неизменяемость не распространяется на элементы.
Частые ошибки
- Считать unmodifiableList надёжной защитой при доступной исходной ссылке.
- Класть null в List.of по привычке от Arrays.asList.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓List.of(...) не допускает null-элементов
- ✗List.copyOf возвращает представление исходного списка, и изменения исходника видны в копии
- ✓unmodifiableList — представление: изменения исходного списка видны
- ✓Неизменяемость коллекции не распространяется на её элементы
Что спросят дальше
- Что такое защитное копирование в конструкторе?
- Чем List.of отличается от Arrays.asList?
Разбор темы
- Collections Framework: карта и выбор структуры
Иерархия интерфейсов, сложности операций основных структур, неизменяемые коллекции и принцип выбора по паттерну доступа.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.