Опишите иерархию коллекций Java.

Иерархия коллекций в Java построена вокруг интерфейсов из пакета java.util, которые задают поведение различных типов коллекций, таких как списки, множества, очереди, карты и т.д.

Коллекции делятся на два больших семейства:

  1. Коллекции (Collection) — представляют набор элементов.

  2. Отображения (Map) — представляют пары ключ-значение.

Разберём полную структуру с пояснениями.

1. 🌿 Интерфейс Collection<E>

Это основной корневой интерфейс для всех коллекций (кроме Map).

Подтипы:

  • List<E> — упорядоченные списки (с индексами)

  • Set<E> — множества (уникальные элементы)

  • Queue<E> — очереди (упорядоченная обработка)

  • Deque<E> — двусторонние очереди

Примеры реализации:

  • ArrayList, LinkedList — реализуют List

  • HashSet, LinkedHashSet, TreeSet — реализуют Set

  • PriorityQueue, ArrayDeque — реализуют Queue/Deque

2. Интерфейс Map<K, V>

Не подчиняется Collection, но часто рассматривается вместе с ней.

Хранит пары ключ-значение.

Подтипы:

  • SortedMap<K, V> — поддерживает сортировку по ключу

  • NavigableMap<K, V> — расширяет SortedMap (например, ceilingEntry, floorEntry)

Реализации:

  • HashMap — быстрая, неупорядоченная

  • LinkedHashMap — сохраняет порядок добавления

  • TreeMap — сортирует по ключам

  • WeakHashMap — ключи удаляются GC при отсутствии strong-ссылок

  • ConcurrentHashMap — потокобезопасная

📊 Структура иерархии (упрощённая)

Iterable
|
Collection
/ | \\
List Set Queue
| | |
ArrayList HashSet PriorityQueue
LinkedList TreeSet ArrayDeque
Vector LinkedHashSet
Map
/ \\
SortedMap ConcurrentMap
| |
TreeMap ConcurrentHashMap

📋 Подробности по основным интерфейсам и реализациям

🔢 List<E>

  • Упорядоченные, допускают дубли.

  • Индексация элементов (get(int index)).

  • Реализации:

    • ArrayList — быстрый доступ, медленные вставки в середину.

    • LinkedList — быстрые вставки/удаления, медленный доступ по индексу.

    • Vector — устаревший, синхронизированный.

✅ Set<E>

  • Уникальные элементы.

  • Без гарантии порядка (в HashSet) или с сортировкой (в TreeSet).

Реализации:

  • HashSet — на базе HashMap, без порядка.

  • LinkedHashSet — сохраняет порядок добавления.

  • TreeSet — сортировка по Comparable или Comparator.

🌀 Queue<E> и Deque<E>

  • Queue — для FIFO (First In First Out)

  • Deque — двусторонняя очередь: поддерживает добавление/удаление с обеих сторон.

Реализации:

  • PriorityQueue — элементы по приоритету.

  • ArrayDeque — быстрая двусторонняя очередь (без null).

Map<K, V>

  • Отдельно от Collection, но тесно связан.

Реализации:

  • HashMap — самая популярная.

  • LinkedHashMap — сохраняет порядок вставки.

  • TreeMap — сортирует по ключам.

  • ConcurrentHashMap — потокобезопасный.

  • WeakHashMap — ключи могут удаляться GC.

🧵 Потокобезопасные коллекции

  • Collections.synchronizedList(list), synchronizedMap(map) — обёртки

  • CopyOnWriteArrayList, ConcurrentHashMap — специализированные

  • Используются в многопоточной среде.

🧠 Итоги

  • Все коллекции (кроме Map) наследуются от Collection<E>.

  • Map<K, V> стоит отдельно, со своими подтипами.

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

  • Интерфейсы задают поведение, реализации — структуру хранения и оптимизацию.

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