Найти тему
DEBAGanov

Java 668. Как вы делаете коллекции доступными только для чтения или немодифицируемыми?

В Java есть несколько способов сделать коллекции доступными только для чтения или немодифицируемыми:

  • Метод Collections.unmodifiableCollection(): Этот метод создает обертку над исходной коллекцией, которая предоставляет только методы чтения (get(), size() и т.д.) и выбрасывает UnsupportedOperationException при попытке изменения. Например:
List<String> originalList = new ArrayList<>();
originalList.add("apple");
originalList.add("banana");
originalList.add("cherry");

List<String> unmodifiableList = Collections.unmodifiableList(originalList);

В этом примере мы создали новый список строк и добавили в него значения "apple", "banana" и "cherry". Затем мы создали немодифицируемую обертку над списком с помощью метода Collections.unmodifiableList().

Использование конструкторов немодифицируемых коллекций: Некоторые реализации коллекций имеют конструкторы, которые позволяют создать немодифицируемую коллекцию напрямую. Например, классы ImmutableList и ImmutableSet из библиотеки Guava предоставляют такие конструкторы:

List<String> immutableList = ImmutableList.of("apple", "banana", "cherry");
Set<Integer> immutableSet = ImmutableSet.of(1, 2, 3);

В этом примере мы использовали конструкторы классов ImmutableList и ImmutableSet, чтобы создать немодифицируемые списки строк и множества целых чисел соответственно.

  • Использование модификационных методов в строгом режиме: Некоторые коллекции, такие как классы Vector и Stack, предоставляют методы для поддержки многопоточности. Если эти методы вызывать в строгом режиме с помощью ключевого слова synchronized, то это может сделать коллекцию доступной только для чтения. Например:
Vector<String> vector = new Vector<>();
vector.add("apple");
vector.add("banana");
vector.add("cherry");

List<String> unmodifiableList = null;

synchronized (vector) {
unmodifiableList = Collections.unmodifiableList(new ArrayList<>(vector));
}

В этом примере мы использовали ключевое слово synchronized, чтобы вызвать метод Collections.unmodifiableList() в строгом режиме. Теперь переменная unmodifiableList содержит немодифицируемую копию списка строк.

Таким образом, есть несколько способов сделать коллекции доступными только для чтения или немодифицируемыми: с помощью метода Collections.unmodifiableCollection(), конструкторов немодифицируемых коллекций и использования модификационных методов в строгом режиме. Каждый из них подходит для разных ситуаций и зависит от требований к производительности, многопоточности и т.д.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov