tl; dr
Para manter Map< Integer , String >
uma ordem classificada por chave, use uma das duas classes que implementam as interfaces SortedMap
/ NavigableMap
:
TreeMap
ConcurrentSkipListMap
Se estiver manipulando o mapa em um único encadeamento, use o primeiro TreeMap
,. Se estiver manipulando threads, use o segundo ConcurrentSkipListMap
,.
Para detalhes, consulte a tabela abaixo e a discussão a seguir.
Detalhes
Aqui está uma tabela gráfica que eu criei mostrando os recursos das dez Map
implementações incluídas no Java 11.
A NavigableMap
interface é o que SortedMap
deveria ter sido em primeiro lugar. A SortedMap
lógica deve ser removida, mas não pode ser, pois algumas implementações de mapas de terceiros podem estar usando a interface.
Como você pode ver nesta tabela, apenas duas classes implementam as interfaces SortedMap
/ NavigableMap
:
Ambos mantêm as chaves na ordem classificada, por ordem natural (usando o compareTo
método de Comparable
( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ Comparable.html )) ou por uma Comparator
implementação aprovada. A diferença entre essas duas classes é que a segunda ,,ConcurrentSkipListMap
é segura para threads , altamente simultânea .
Consulte também a coluna Ordem de iteração na tabela abaixo.
- A
LinkedHashMap
classe retorna suas entradas pela ordem em que foram originalmente inseridas .
EnumMap
retorna entradas na ordem em que a classe enum da chave é definida . Por exemplo, um mapa de qual funcionário está cobrindo qual dia da semana ( Map< DayOfWeek , Person >
) usa a DayOfWeek
classe enum incorporada ao Java. Essa enumeração é definida com segunda e domingo, primeiro. Portanto, as entradas em um iterador aparecerão nessa ordem.
As outras seis implementações não prometem a ordem em que relatam suas entradas.