Я был удивлен тем, что 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
является aCollection
, каковы элементы? Единственный разумный ответ - «Пары ключ-значение»
Точно, interface Map<K,V> extends Set<Map.Entry<K,V>>
было бы здорово!
но это обеспечивает очень ограниченную (и не особо полезную)
Map
абстракцию.
Но если это так, то почему entrySet
указывается интерфейс? Это должно быть как-то полезно (и я думаю, что легко отстаивать эту позицию!).
Вы не можете спросить, к какому значению относится данный ключ, и не можете удалить запись для данного ключа, не зная, к какому значению он соответствует.
Я не говорю, что это все, что нужно сделать Map
! Он может и должен сохранять все другие методы (кроме entrySet
, который сейчас избыточен)!