tl; dr
Para mantener Map< Integer , String >
un orden ordenado por clave, use cualquiera de las dos clases que implementan las interfaces SortedMap
/ NavigableMap
:
TreeMap
ConcurrentSkipListMap
Si manipula el mapa dentro de un solo hilo, use el primero TreeMap
,. Si manipula a través de hilos, use el segundo,ConcurrentSkipListMap
,.
Para más detalles, consulte la tabla a continuación y la siguiente discusión.
Detalles
Aquí hay una tabla gráfica que hice mostrando las características de los diez Map
implementaciones incluidas con Java 11.
La NavigableMap
interfaz es lo que SortedMap
debería haber sido en primer lugar. losSortedMap
lógica debe ser retirado, pero no puede ser tan algunas implementaciones mapa tercera partes pueden estar usando la interfaz.
Como puede ver en esta tabla, solo dos clases implementan las interfaces SortedMap
/ NavigableMap
:
Ambos mantienen las claves en orden, ya sea por su orden natural (utilizando el compareTo
método de Comparable
( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ Comparable.html ) interfaz) o por una Comparator
implementación que pasa. La diferencia entre estas dos clases es que la segunda ConcurrentSkipListMap
es segura para subprocesos , altamente concurrente .
Consulte también la columna Orden de iteración en la tabla a continuación.
- La
LinkedHashMap
clase devuelve sus entradas por el orden en que se insertaron originalmente .
EnumMap
devuelve entradas en el orden en que se define la clase enum de la clave . Por ejemplo, un mapa de qué empleado cubre qué día de la semana ( Map< DayOfWeek , Person >
) usa la DayOfWeek
clase enum integrada en Java. Esa enumeración se define con el lunes primero y el domingo pasado. Entonces las entradas en un iterador aparecerán en ese orden.
Las otras seis implementaciones no prometen el orden en que informan sus entradas.