Для чего нужен Collections.unmodifiableList() и что он делает?

Чтобы обеспечить неизменяемость коллекции List внутри класса в Java, можно использовать несколько подходов:

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

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

Чтобы обеспечить неизменяемость коллекции List внутри класса в Java, можно использовать несколько подходов:

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

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

Чтобы обеспечить неизменяемость коллекции List внутри класса в Java, можно использовать несколько подходов:

  1. Использование Collections.unmodifiableList

    • Создаёте список, затем оборачиваете его в Collections.unmodifiableList, чтобы получить "читаемый" список без возможности модификации.
    • Важно, что если исходный список изменяется, то и "неизменяемый" список отражает эти изменения.
import java.util.*;

public class MyClass {
    private final List<String> list;

    public MyClass(List<String> input) {
        this.list = Collections.unmodifiableList(new ArrayList<>(input));
    }

    public List<String> getList() {
        return list;
    }
}
  1. Использование неизменяемых коллекций из Java 9+

    • Можно создавать неизменяемые списки с помощью List.of(...).
    • Такие списки нельзя изменить после создания.
public class MyClass {
    private final List<String> list;

    public MyClass(List<String> input) {
        this.list = List.copyOf(input);
    }

    public List<String> getList() {
        return list;
    }
}
  1. Копирование списка при передаче и возврате

    • При передаче списка в конструктор создаёте копию.
    • При возврате списка из геттера возвращаете копию, чтобы внешний код не мог изменить внутренний список.
  2. Использование сторонних библиотек

    • Например, Guava предоставляет ImmutableList, который гарантирует неизменяемость.

Выбор подхода зависит от требований к производительности и безопасности. Главное — не предоставлять прямой доступ к изменяемому списку и использовать неизменяемые обёртки или копии.

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

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

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

Подробнее