EnumMap<K extends Enum<K>, V>
w Javie jest wyraźnie uporządkowane według definicji powiązanego wyliczenia, co można również zobaczyć w javadoc:
Mapy wyliczeniowe są utrzymywane w naturalnej kolejności ich kluczy (w kolejności, w której deklarowane są stałe wyliczeniowe). Znajduje to odzwierciedlenie w iteratorów zwracanych przez poglądami kolekcje ( keySet()
, entrySet()
, i values()
).
Potrzebuję SortedMap
użycia wyliczenia jako klucza. Chcę używać metod takich jak headMap()
lub firstKey()
, ale chcę czerpać zyski z dodanej wydajności procesora i pamięci EnumMap
s. To TreeMap
brzmi jak o wiele za dużo tutaj.
Pytanie : czy zostało to pominięte w realizacji, czy było to lenistwo (wywodzące się z AbstractMap
), czy też jest dobry powód, dla którego tak EnumMap
nie jest SortedMap
?
TreeMap
?Odpowiedzi:
Nie da to odpowiedzi na twoje podstawowe pytanie (ponieważ odpowiedź mają tylko oryginalni projektanci), ale jednym z rozważanych przeze mnie rozwiązań było wdrożenie go samodzielnie. Próbując wykonać
SortedMap
implementację opartą naEnumMap
, wymyśliłem następującą klasę.Jest to z pewnością szybka i brudna implementacja (i pamiętaj, że nie jest w pełni zgodna z
SortedMap
- ponieważ wymagania dotyczące widoku nie są spełnione), ale jeśli potrzebujesz , możesz ją poprawić:I na szybki test (jeszcze nie znaleziono błędów):
Dostaję:
źródło
Otwórz żądanie funkcji
Znalazłem ten problem dla OpenJDK . Jest od 2005 roku, ale wciąż jest otwarty / nierozwiązany.
Zakładam, że nie ma żadnego „dobrego powodu” dla tego, że nie został zaimplementowany.
źródło