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 Mapimplementações incluídas no Java 11.
A NavigableMapinterface é o que SortedMapdeveria ter sido em primeiro lugar. A SortedMapló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 compareTométodo de Comparable( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ Comparable.html )) ou por uma Comparatorimplementaçã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
LinkedHashMapclasse retorna suas entradas pela ordem em que foram originalmente inseridas .
EnumMapretorna 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 DayOfWeekclasse 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.
