ТЛ; др
Чтобы сохранить Map< Integer , String >
порядок, отсортированный по ключу, используйте любой из двух классов, реализующих интерфейсы SortedMap
/ NavigableMap
:
TreeMap
ConcurrentSkipListMap
Если вы манипулируете картой внутри одного потока, используйте первый TreeMap
,. При манипулировании потоками используйте второе ConcurrentSkipListMap
,.
Для получения дополнительной информации см. Таблицу ниже и последующее обсуждение.
подробности
Вот графическая таблица, которую я сделал, показывающий возможности десяти Map
реализаций, связанных с Java 11.
NavigableMap
Интерфейс , что SortedMap
должно быть в первую очередь. SortedMap
Логически должны быть удалены , но не может быть , как некоторые карты реализации третьей стороны может использовать интерфейс.
Как видно из этой таблицы, только два класса реализуют интерфейсы SortedMap
/ NavigableMap
:
Оба из них хранят ключи в отсортированном порядке, либо в их естественном порядке (используя compareTo
метод Comparable
( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ Comparable.html ) или через Comparator
реализацию, которую вы передаете. Разница между этими двумя классами заключается в том, что второй класс ConcurrentSkipListMap
является потокобезопасным и очень параллельным .
См. Также столбец « Порядок итераций» в таблице ниже.
LinkedHashMap
Класс возвращает свои записи по порядку , в котором они были первоначально вставлены .
EnumMap
возвращает записи в порядке, в котором определяется класс перечисления ключа . Например, карта того, какой сотрудник покрывает, какой день недели ( Map< DayOfWeek , Person >
) использует DayOfWeek
класс enum, встроенный в Java. Это перечисление определяется первым понедельником и последним воскресеньем. Таким образом, записи в итераторе будут появляться в таком порядке.
Другие шесть реализаций не дают никаких обещаний относительно порядка, в котором они сообщают свои записи.