Почему Map в Java иногда называют коллекцией, хотя он не наследует интерфейс Collection?

«Почему Map в Java иногда называют коллекцией, хотя он не наследует интерфейс Collection?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Строго говоря, Map (например, HashMap, TreeMap) не является коллекцией в иерархии Java, так как не реализует интерфейс Collection. Он представляет собой отдельную иерархию для работы с парами «ключ-значение».

Почему же его называют коллекцией? В широком, неформальном смысле Map называют коллекцией, потому что он хранит и управляет набором объектов (элементов). Более того, сам Map предоставляет три представления (views), которые являются настоящими коллекциями (Collection или Set):

Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 95);
scores.put("Bob", 87);

// Эти представления — настоящие коллекции:
Set<String> keys = scores.keySet();         // Коллекция ключей (Set)
Collection<Integer> values = scores.values(); // Коллекция значений (Collection)
Set<Map.Entry<String, Integer>> entries = scores.entrySet(); // Коллекция пар (Set)
Ключевые отличия Map от Collection: Признак Map<K, V> Collection<E>
Элемент Пара ключ-значение (Entry) Одиночный элемент (E)
Добавление V put(K key, V value) boolean add(E e)
Получение V get(Object key) Только через итератор или для List по индексу
Уникальность Ключи уникальны Элементы могут дублироваться (кроме Set)

Вывод: Термин «коллекция» для Map используется в общем смысле «контейнер для данных». Технически же Map — это отдельная абстракция, тесно интегрированная с коллекциями через свои представления.