EnumMap<K extends Enum<K>, V>
em Java é claramente ordenado por definição da enum associada, como você também pode ver no javadoc:
Os mapas enum são mantidos na ordem natural de suas chaves (a ordem na qual as constantes enum são declaradas). Isto reflecte-se nas iterators retornados pelas vistas colecções ( keySet()
, entrySet()
, e values()
).
O que eu preciso é SortedMap
usar uma enumeração como tipo de chave. Eu quero usar métodos como headMap()
ou firstKey()
, mas quero aproveitar o desempenho adicionado da memória cpu + de EnumMap
s. A TreeMap
sons como forma demasiada sobrecarga aqui.
Pergunta : isso foi esquecido na implementação, foi preguiça (derivada de AbstractMap
) ou existe um bom motivo para EnumMap
não ser um SortedMap
?
TreeMap
?Respostas:
Isso não responderá à sua pergunta principal (porque apenas os designers originais têm a resposta), mas uma abordagem que eu estava pensando era que você a implementasse por conta própria. Enquanto tentava fazer uma
SortedMap
implementação baseadaEnumMap
, criei a seguinte classe.Esta é certamente uma implementação rápida e suja (e observe que ela não é totalmente compatível
SortedMap
- porque os requisitos de exibição não são atendidos), mas se você precisar de uma, poderá melhorá-la:E para um teste rápido (erros ainda a serem encontrados):
Eu recebo:
fonte
Solicitação de recurso aberto
Consegui encontrar esse problema no OpenJDK . É a partir de 2005, mas ainda está aberto / não resolvido.
Eu diria que não há nenhuma "boa razão" para que isso não seja implementado.
fonte