Ich war überrascht, dass Map<?,?>
das kein ist Collection<?>
.
Ich dachte, es wäre sehr sinnvoll, wenn es als solches deklariert würde:
public interface Map<K,V> extends Collection<Map.Entry<K,V>>
Immerhin ist a Map<K,V>
eine Sammlung von Map.Entry<K,V>
, nicht wahr?
Gibt es einen guten Grund, warum es nicht als solches implementiert wird?
Vielen Dank an Cletus für die maßgebliche Antwort, aber ich frage mich immer noch, warum, wenn Sie bereits ein Map<K,V>
as Set<Map.Entries<K,V>>
(via entrySet()
) anzeigen können , diese Schnittstelle nicht einfach erweitert wird.
Wenn a a
Map
istCollection
, was sind die Elemente? Die einzig vernünftige Antwort lautet "Schlüssel-Wert-Paare".
Genau, interface Map<K,V> extends Set<Map.Entry<K,V>>
wäre toll!
Dies bietet jedoch eine sehr begrenzte (und nicht besonders nützliche)
Map
Abstraktion.
Aber wenn dies der Fall ist, warum wird es dann entrySet
von der Schnittstelle angegeben? Es muss irgendwie nützlich sein (und ich denke, es ist einfach, für diese Position zu argumentieren!).
Sie können weder fragen, welchem Wert ein bestimmter Schlüssel zugeordnet ist, noch den Eintrag für einen bestimmten Schlüssel löschen, ohne zu wissen, welchem Wert er zugeordnet ist.
Ich sage nicht, dass das alles ist, was dazu gehört Map
! Es kann und sollte alle anderen Methoden beibehalten (außer entrySet
, die jetzt redundant sind)!