Ответ
Иерархия JCF строится вокруг двух корневых интерфейсов: Collection и Map.
1. Корневой интерфейс Collection<E>
Определяет базовые операции для групп объектов: add, remove, contains, size, iterator.
От него наследуются:
List<E>— упорядоченная коллекция с допустимыми дубликатами. Доступ по индексу.- Реализации:
ArrayList,LinkedList,CopyOnWriteArrayList.
- Реализации:
Set<E>— коллекция уникальных элементов (не допускает дубликатов).SortedSet<E>/NavigableSet<E>—Setс гарантированным порядком сортировки.- Реализации:
TreeSet,ConcurrentSkipListSet.
- Реализации:
- Другие реализации:
HashSet(неупорядочен),LinkedHashSet(сохраняет порядок вставки).
Queue<E>— коллекция, предназначенная для обработки элементов в определенном порядке (обычно FIFO).Deque<E>— двусторонняя очередь (добавление/удаление с обоих концов).- Реализации:
ArrayDeque,LinkedList.
- Реализации:
- Другие реализации:
PriorityQueue(очередь с приоритетом).
2. Корневой интерфейс Map<K, V>
Представляет отображение «ключ-значение». Ключи уникальны.
SortedMap<K, V>/NavigableMap<K, V>—Mapс ключами, отсортированными по естественному порядку или компаратору.- Реализации:
TreeMap,ConcurrentSkipListMap.
- Реализации:
- Другие реализации:
HashMap(неупорядочен),LinkedHashMap(сохраняет порядок вставки),ConcurrentHashMap(потокобезопасная).
Примеры объявления:
Collection<String> coll = new ArrayList<>(); // Общая ссылка
List<String> list = new ArrayList<>(); // Конкретный тип
Set<Integer> set = new HashSet<>();
Map<String, Object> map = new HashMap<>();
Queue<Double> queue = new ArrayDeque<>();
Почему важна иерархия? Она позволяет писать полиморфный код, работающий с абстракцией (Collection, Iterable), а не с конкретной реализацией, повышая гибкость и поддерживаемость.