Опишите иерархию коллекций Java.
Иерархия коллекций в Java построена вокруг интерфейсов из пакета java.util, которые задают поведение различных типов коллекций, таких как списки, множества, очереди, карты и т.д.
Коллекции делятся на два больших семейства:
-
Коллекции (Collection) — представляют набор элементов.
-
Отображения (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> стоит отдельно, со своими подтипами.
-
Есть богатый выбор реализаций с разной семантикой: упорядоченность, уникальность, производительность, потокобезопасность.
-
Интерфейсы задают поведение, реализации — структуру хранения и оптимизацию.
Эта иерархия позволяет гибко выбирать нужный тип коллекции в зависимости от задачи: от простого списка до сложной, сортированной и безопасной в многопоточности карты.