Почему интерфейс Map в Java не расширяет интерфейс Collection?

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

Ответ

Map и Collection представляют фундаментально разные абстракции, что делает наследование невозможным без нарушения принципов проектирования.

Ключевые различия: Аспект Collection<E> Map<K, V>
Элемент данных Одиночный объект (E) Пара ключ-значение (K → V)
Основные методы add(E), remove(Object), contains(Object) put(K, V), get(K), containsKey(K)
Семантика Хранилище элементов Ассоциативный массив (словарь)

Пример несовместимости:

Collection<String> collection = new ArrayList<>();
collection.add("element"); // OK: добавляет элемент

// Если бы Map был Collection:
Collection<?> mapAsCollection = new HashMap<String, Integer>();
mapAsCollection.add(???); // Что добавлять? Ключ? Значение? Пару?

Принцип подстановки Лисков (LSP) был бы нарушен: методы Collection (например, add) не имели бы осмысленной реализации для Map. Вместо этого Map предоставляет три отдельных Collection-представления через keySet(), values() и entrySet(), что является более чистым дизайном.