ТЛ; др
Чтобы сохранить 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. Это перечисление определяется первым понедельником и последним воскресеньем. Таким образом, записи в итераторе будут появляться в таком порядке.
Другие шесть реализаций не дают никаких обещаний относительно порядка, в котором они сообщают свои записи.
