Я был удивлен тем, что Map<?,?>
не является Collection<?>
.
Я думал, что это создаст много смысла, если бы оно было объявлено как таковое:
public interface Map<K,V> extends Collection<Map.Entry<K,V>>
В конце концов, Map<K,V>
представляет собой набор Map.Entry<K,V>
, не так ли?
Так есть ли веская причина, почему это не реализовано как таковое?
Благодаря Cletus для наиболее авторитетного ответа, но мне все еще интересно, почему, если вы уже можете просматривать Map<K,V>
как Set<Map.Entries<K,V>>
(через entrySet()
), он не просто расширяет этот интерфейс.
Если a
Map
являетсяCollection
, то какие элементы? Единственный разумный ответ - "пары ключ-значение"
Точно, interface Map<K,V> extends Set<Map.Entry<K,V>>
было бы здорово!
но это обеспечивает очень ограниченную (и не особенно полезную) абстракцию
Map
.
Но если это так, то почему entrySet
, заданный интерфейсом? Это должно быть полезно как-то (и я думаю, что легко спорить об этой позиции!).
Вы не можете спросить, какое значение имеет данный ключ, а также не может удалить запись для заданного ключа, не зная, какое значение оно отображает.
Я не говорю, что все это к Map
! Он может и должен сохранять все другие методы (кроме entrySet
, который теперь избыточен)!