EnumMap<K extends Enum<K>, V>
en Java est clairement ordonné par définition de l'énumération associée, comme vous pouvez également le voir dans le javadoc:
Les mappages d'énumération sont conservés dans l'ordre naturel de leurs clés (l'ordre dans lequel les constantes d'énumération sont déclarées). Cela se reflète dans les itérateurs renvoyés par les vues (collections keySet()
, entrySet()
et values()
).
Ce dont j'ai besoin, c'est d' SortedMap
utiliser une énumération comme type de clé. Je veux utiliser des méthodes comme headMap()
ou firstKey()
, mais je veux profiter des performances de mémoire cpu + ajoutées de EnumMap
s. Un TreeMap
son comme beaucoup trop de frais généraux ici.
Question : est-ce que cela a été manqué dans la mise en œuvre, était-ce la paresse (dérivée de AbstractMap
) ou y a-t-il une bonne raison pour laquelle ce EnumMap
n'est pas le cas SortedMap
?
TreeMap
?Réponses:
Cela ne répondra pas à votre question principale (car seuls les concepteurs originaux ont la réponse), mais une approche que j'envisageais était pour vous de l'implémenter vous-même. En essayant de faire une
SortedMap
implémentation basée surEnumMap
, j'ai trouvé la classe suivante.C'est sûrement une implémentation rapide et sale (et notez qu'elle n'est pas entièrement conforme
SortedMap
- car les exigences de vue ne sont pas remplies), mais si vous en avez besoin , vous pouvez l'améliorer:Et pour un test rapide (bugs encore à trouver):
Je reçois:
la source
Ouvrir la demande de fonctionnalité
J'ai pu trouver ce problème pour OpenJDK . Elle date de 2005 mais n'est toujours pas résolue.
Je suppose qu'il n'y a aucune "bonne raison" pour que cela ne soit pas mis en œuvre.
la source