В этой статье показаны различные способы инициализации HashMap
в Java.
- Инициализация хэш-карты (стандартная)
- Инициализация хэш-карты (стандартная)
- Карта Java 9. из
- Карта Java 9. Записей
- Создайте функцию для возврата карты
- Статический инициализатор
- Java 8, поток простого ввода
- Вывод
После инициализации хэш-карты
, результатом будет либо изменяемая карта
, либо неизменяемая карта
:
Изменяемая карта
– Это означает, что мы можем изменять записиMap
.Неизменяемая карта
– Это означает, что мы не можем добавлять или изменять записиMap
, и если мы изменим их, это приведет кИсключение UnsupportedOperationException
.
1. Инициализация хэш-карты (стандартная)
Этот пример является стандартным способом Java для объявления и инициализации хэш-карты
. В результате получается изменяемая карта, и мы можем использовать Collections.unmodifiableMap
для преобразования изменяемой карты в неизменяемую карту.
// normal way, mutable map Mapmap = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); System.out.println(map.getClass()); // java.util.HashMap // convert mutable Map to immutable map Map immutableMap = Collections.unmodifiableMap(map); System.out.println(immutableMap.getClass()); // java.util.Collections$UnmodifiableMap immutableMap.put("key4", "value4"); // UnsupportedOperationException
2. В результате получается изменяемая карта, и мы можем использовать ||Collections.unmodifiableMap|| для преобразования изменяемой карты в неизменяемую карту.
В этом примере используется Collections.singletonmap
для инициализации одной записи SingletonMap
, неизменяемая карта.
// @since 1.3 // single entry immutable map Mapmap = Collections.singletonMap("key1", "value1"); System.out.println(map.getClass()); // java.util.Collections$SingletonMap map.put("key2", "value2"); // throws UnsupportedOperationException
3. Карта Java 9. из
Java 9 представила новый API Map.of
возвращает неизменяемую или неизменяемую карту, содержащую до 10 записей.
// Java 9, max is 10 entries or elements, immutable map Mapmap = Map.of( "key1", "value1", "key2", "value2", "key3", "value3" ); System.out.println(map.getClass()); // java.util.ImmutableCollections$MapN map.put("key3", "value4"); // throws UnsupportedOperationException
Просмотрите исходный код Java 9 Map.java
. Они создали 10 Map.of
методов перегрузки для инициализации Карты
, содержащей до 10 записей или элементов.
staticMap of(K k1, V v1) { return new ImmutableCollections.Map1<>(k1, v1); } static Map of(K k1, V v1, K k2, V v2) { return new ImmutableCollections.MapN<>(k1, v1, k2, v2); } static Map of(K k1, V v1, K k2, V v2, K k3, V v3) { return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3); } // up to 10 elements...
4. Карта Java 9. Записей
Java 9 представила аналогичный API, Map. записей
, который возвращает неизменяемую или неизменяемую карту, но это Карта
не имеет ограничений для записи Карта
, и мы можем создать столько записей, сколько захотим.
// Java 9, no limit of Map entry, immutable map. Mapmap = Map.ofEntries( Map.entry("key1", "value1"), Map.entry("key2", "value2"), Map.entry("key3", "value3") ); System.out.println(map.getClass()); // java.util.ImmutableCollections$MapN map.put("key4", "value4"); // throws UnsupportedOperationException
5. Создайте функцию для возврата карты
Мы можем создать функцию для инициализации хэш-карты
, который работает для всех версий Java. Функция возвращает изменяемую карту.
// It works for all Java versions, mutable map. Mapmap = createMap(); System.out.println(map.getClass()); // java.util.HashMap map.put("key4", "value4"); // yes, we can do it private static Map createMap() { Map map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); return map; }
6. Статический инициализатор
Это решение предназначено для статической переменной Map
и возвращает изменяемую карту.
public static Mapmap; static { // mutable map map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); }
7. Java 8, поток простого ввода
В этом примере создается поток Простой записи
и возвращается изменяемая карта.
Не используйте приведенный ниже метод для инициализации хэш-карты
, , я не вижу никаких преимуществ потока
Простой записи
import java.util.AbstractMap; import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; import static java.util.stream.Collectors.toMap; //... // mutable map Mapmap = Stream.of( new AbstractMap.SimpleEntry<>("key1", "value1"), new AbstractMap.SimpleEntry<>("key2", "value2"), new AbstractMap.SimpleEntry<>("key3", "value3")) .collect( toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue) ); System.out.println(map.getClass()); // java.util.HashMap map.put("key4", "value4"); // no problem.
Вывод
Ниже приведен небольшой обзор каждого из способов инициализации HashMap
.
- Инициализация хэш-карты (стандартная) – Самый лучший.
- Коллекции.singletonmap – Меньше вариантов использования.
- Карта Java 9.of – Если у вас есть Java 9 и вы хотите создать неизменяемую карту.
- Java 9 Map.ofEntries – То же, что и выше.
- Создайте функцию для возврата карты – Она работает везде.
- Статический инициализатор – Для переменной статической Карты.
- Java 8, Поток простого ввода – Не используйте это, если только вы не хотите продемонстрировать умение Java 8.
Скачать Исходный Код
$клон git $клон git
$cd java-базовый/коллекции
Рекомендации
- Создание неизменяемых списков, наборов и карт
- Как зациклить карту на Java
Оригинал: “https://mkyong.com/java/how-to-initialize-a-hashmap-in-java/”