EnumMap<K extends Enum<K>, V>
in Java ist klar nach Definition der zugehörigen Aufzählung geordnet, wie Sie auch im Javadoc sehen können:
Enum-Maps werden in der natürlichen Reihenfolge ihrer Schlüssel verwaltet (der Reihenfolge, in der die Enum-Konstanten deklariert werden). Dies spiegelt sich in den Iteratoren von den Sammlungen Ansichten zurück ( keySet()
, entrySet()
, und values()
).
Was ich brauche, ist die SortedMap
Verwendung einer Aufzählung als Schlüsseltyp. Ich möchte Methoden wie headMap()
oder verwenden firstKey()
, aber ich möchte von der zusätzlichen CPU + Speicherleistung von EnumMap
s profitieren . A TreeMap
klingt hier viel zu viel Aufwand.
Frage : Wurde dies bei der Implementierung nur übersehen, war es Faulheit (abgeleitet von AbstractMap
) oder gibt es einen guten Grund, warum dies EnumMap
nicht der Fall ist SortedMap
?
TreeMap
?Antworten:
Dies gibt keine Antwort auf Ihre primäre Frage (da nur die ursprünglichen Designer die Antwort haben), aber ein Ansatz, den ich in Betracht gezogen habe, war, dass Sie sie selbst implementieren. Beim Versuch, eine
SortedMap
Implementierung basierend auf zu erstellenEnumMap
, habe ich die folgende Klasse entwickelt.Dies ist sicherlich eine schnelle und schmutzige Implementierung (und beachten Sie, dass sie nicht vollständig kompatibel ist
SortedMap
- da die Ansichtsanforderungen nicht erfüllt sind). Wenn Sie jedoch eine benötigen , können Sie sie verbessern:Und für einen schnellen Test (Fehler müssen noch gefunden werden):
Ich bekomme:
quelle
Funktionsanforderung öffnen
Ich konnte dieses Problem für OpenJDK finden . Es ist von 2005 noch offen / ungelöst.
Ich würde annehmen, dass es keinen "guten Grund" dafür gibt, dass dies nicht implementiert wird.
quelle