tl; dr
Создайте LinkedHashMap
, заверните вызовом Collections.umodifiableMap
, как обсуждено в Неизменяемые представления коллекций .
Map.of
неизменяемые статические фабричные карты
Реализация Map
, используемая методами Map.of
, четко документирована в Javadoc.Один из пунктов указывает на то, что ключи не отсортированы:
Неизменяемые карты
…
Порядок итераций сопоставлений не определен и может быть изменен.
…
Таким образом, вы должны использовать другую реализацию Map
, если требуется сортировка.
SortedMap
By "Порядок сохранения"Вы имели в виду отсортированный порядок?
Java включает интерфейс SortedMap
для определения поведения реализаций Map
, которые поддерживают общее упорядочение по всем его ключам.
В Java есть две такие реализации: TreeMap
и ConcurrentSkipListMap
.
Исходный порядок вставки сохранен
Ваш вопрос неясен, но я думаю, что вы подразумевали под "сохранить порядок", что вы хотите сохранить ключ в том порядке, в котором они были добавленына карту.LinkedHashMap
делает именно это, как указано в правильном ответе randypaq13 .
Чтобы процитировать Javadoc:
… предсказуемый порядок итераций…
… поддерживает двусвязный список, проходящий через все его записи.Этот связанный список определяет порядок итераций, который обычно является порядком, в котором ключи были вставлены в карту (порядок вставки).Обратите внимание, что порядок вставки не изменяется, если ключ повторно вставлен в карту.
Неизменяемые карты
LinkedHashMap
соответствует вашей потребности в исходном порядке размещения, но не вашей потребности в неизменяемости.Для этого используйте класс Collections
с его утилитарным методом unmodifiableMap
.
Map< String , String > map = new LinkedHashMap<>() ;
map.put( "this" , "that" ) ;
map.put( "other" , "thing" ) ;
Map< String , String > unmodMap = Collections.unmodifiableMap( map ) ;
Обязательно изучите документацию по Unmodifiable View Collections , чтобы понять их поведение.Нажмите, чтобы увеличить.
Вот таблица с обзором всех реализаций Map
, связанных с Java 11.