Изменчивость или неизменность не имеют прямого отношения к сложности операции доступа в Map
.Например, HashMap
всегда будет O(1)
для операции get()
, тогда как TreeMap
будет O(log n)
.Это реализующий класс интерфейса Map
, который определяет сложность операций.
Кроме того, всегда можно было создать неизменяемые карты, потому что мы можем сделать любой Map
любогоконкретный тип неизменяемый после того, как мы поместили в него элементы, например:
Map<Integer, String> immutableMap = Collections.unmodifiableMap(mutableMap);
Для ясности HashMap.ofEntries()
не будет работать, потому что метод ofEntries()
является статическим и определен в интерфейсе Map
,ни в одном из реализующих его классов.
И вам не следует беспокоиться о невозможности объявить тип карты как HashMap
или какой-либо другой конкретный класс, в любом случае, лучше всего объявлять карту какинтерфейса Map
.
Кроме того, если вы использовали версию, более раннюю, чем Java 9, и не возражаете против использования внешней библиотеки, вы можете использовать ImmutableMap
из Guava:
Map<Integer, String> immutableMap = ImmutableMap.of(key1, val1, key2, val2);
Возможно, чтение этой статьи прояснит ситуацию немного подробнее.