Как получить коллекцию, которая будет доступна только для чтения?

Использовать статические методы Collections.unmodifiable() такие как Collections.unmodifiableList(), Collections.unmodifiableSet(), Collections.unmodifiableMap() или Collections.unmodifiableCollection().

Короткий ответ

Что ответить на собеседовании

Использовать статические методы Collections.unmodifiable() такие как Collections.unmodifiableList(), Collections.unmodifiableSet(), Collections.unmodifiableMap() или Collections.unmodifiableCollection(). Эти методы возвращают обертку над исходной коллекцией, которая генерирует UnsupportedOperationException при попытке модификации.

Подробный разбор

Ответ с пояснениями

Использовать статические методы Collections.unmodifiable*() такие как Collections.unmodifiableList(), Collections.unmodifiableSet(), Collections.unmodifiableMap() или Collections.unmodifiableCollection(). Эти методы возвращают обертку над исходной коллекцией, которая генерирует UnsupportedOperationException при попытке модификации.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class UnmodifiableCollectionExample {

    public static void main(String[] args) {
        List<String> mutableList = new ArrayList<>();
        mutableList.add("Элемент 1");
        mutableList.add("Элемент 2");

        // Получение неизменяемой коллекции
        List<String> unmodifiableList = Collections.unmodifiableList(mutableList);

        System.out.println("Неизменяемый список: " + unmodifiableList);

        // Попытка модификации приведет к исключению
        try {
            unmodifiableList.add("Новый элемент");
        } catch (UnsupportedOperationException e) {
            System.out.println("Попытка добавить элемент к неизменяемому списку вызвала исключение: " + e);
        }
    }
}

Важно отметить, что неизменяемая коллекция доступна только для чтения поверх существующей коллекции. Если исходная коллекция будет изменена, эти изменения будут видны и через неизменяемую обертку. Для создания полностью независимой неизменяемой копии, нужно сначала скопировать элементы в новую коллекцию, а затем обернуть ее.

Также можно использовать фабричные методы из List.of(), Set.of(), Map.of() (начиная с Java 9) для создания неизменяемых коллекций с предопределенным набором элементов.

import java.util.List;
import java.util.Set;
import java.util.Map;

public class ImmutableFactoryExample {

    public static void main(String[] args) {
        List<String> immutableList = List.of("A", "B", "C");
        Set<Integer> immutableSet = Set.of(1, 2, 3);
        Map<String, Integer> immutableMap = Map.of("one", 1, "two", 2);

        System.out.println("Неизменяемый список: " + immutableList);
        System.out.println("Неизменяемое множество: " + immutableSet);
        System.out.println("Неизменяемая карта: " + immutableMap);

        // Попытка модификации
        try {
            immutableList.add("D");
        } catch (UnsupportedOperationException e) {
            System.out.println("Попытка добавить элемент к неизменяемому списку (фабричный метод) вызвала исключение: " + e);
        }
    }
}

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее