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

Почему интерфейс java.util.Map не расширяет интерфейс java.util.Collection? Не является ли java.util.Map набором пар ключ-значение?

Ответы

Ответ 1

Коллекция принимает элементы одного значения. Карта принимает записи пар ключ/значение. Они могли бы быть спроектированы для повторного использования одного и того же общего интерфейса, однако некоторые методы, которые они реализуют, несовместимы, например.

Collection.remove(Object) - removes an element.
Map.remove(Object) - removes by key, not by entry.

Вы можете смоделировать карту как коллекцию записей, что и делает Map.entrySet().

Есть несколько общих методов; size(), isEmpty(), clear(), putAll/addAll(), но вряд ли они будут иметь большое значение как автономный интерфейс. (Вместо этого можно использовать Map.entrySet())

Ответ 2

Поскольку интерфейс Collection в значительной степени несовместим с интерфейсом Map. Если Map extended Collection, что бы сделал метод add(Object)?

Два интерфейса имеют очень разную семантику. Если вам нужны значения или ключи из Map как коллекции, вы всегда можете использовать keySet()/values().

Ответ 3

Почему интерфейс java.util.Map расширить интерфейс java.util.Collection?

Map - пара ключ/значение, тогда как Collection представляет собой набор группы объектов, хранящихся в структурированном виде, и имеет определенный механизм доступа. Причина, по которой карта не расширяет интерфейс Collections, заключается в том, что add(E e); не поддерживает пару ключевых значений, например Map put(K, V).

Кроме того, что бы метод Collection iterator() указывал, должен ли Map его расширять? Итератор ключа или итератор значений?

Ответ 4

Поскольку некоторые методы, объявленные в Collections, не соответствуют интерфейсу Map и наоборот.

Примером первого является метод add(Object) интерфейса Collections, примером второго является put(K, V) интерфейса Map.

Существует просто нет последовательного способа разумно реализовать add(Object) для Карты - это ключ, это ценность? То же самое верно для put(K, V). Что может быть ключом в ArrayList?

Ответ 5

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

Так как Map налагает ограничения на тип объектов, которые он может удерживать, вы не можете реализовать карту как коллекцию.