Иерархия Collection

Базовый Java
≈ 2 мин чтения

Общий интерфейс для разных структур

Большинство коллекций Java объединены общей системой интерфейсов. Это позволяет работать не с конкретным классом, а с тем набором возможностей, который действительно нужен коду. В центре этой системы находится интерфейс Collection<E>.

Он описывает базовые операции над группой элементов: добавить значение, удалить его, проверить наличие, узнать размер или очистить коллекцию. Конкретные ветви добавляют к этим операциям свои правила.

Collection<String> names = new ArrayList<>();
names.add("Ann");
names.add("Bob");

System.out.println(names.contains("Ann"));
System.out.println(names.size());

Главные ветви

  • List<E> — упорядоченная последовательность, где элементы могут повторяться.
  • Set<E> — набор уникальных элементов.
  • Queue<E> — структура для обработки элементов в определённом порядке.
  • Deque<E> — очередь, у которой можно работать с обоими концами.

Эти интерфейсы не задают конкретное внутреннее устройство. Например, переменная типа List<String> может ссылаться на разные реализации списка. Это удобно: остальной код зависит от поведения List, а не от деталей конкретного класса.

А где Map?

Map<K, V> относится к Collections Framework, но не наследуется от Collection. Причина в модели данных: обычная коллекция хранит отдельные элементы, а Map хранит пары «ключ — значение».

Поэтому у карты свой набор основных операций: положить значение по ключу, получить его, проверить наличие ключа или удалить пару. Эту ветвь мы разберём отдельно.

Старайся объявлять переменную через нужный интерфейс. Если коду достаточно возможностей List, обычно лучше написать List<String> names = new ArrayList<>();, а не привязывать переменную к ArrayList без необходимости.