Как получить коллекцию, которая будет доступна только для чтения?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Использовать статические методы 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);
}
}
}