Рубрики
Без рубрики

Как инициализировать хэш-карту в Java

В этой статье показаны различные способы инициализации “HashMap” в Java. Java 9 Map.of, создайте функцию для возврата карты и т. Д.

В этой статье показаны различные способы инициализации HashMap в Java.

  1. Инициализация хэш-карты (стандартная)
  2. Инициализация хэш-карты (стандартная)
  3. Карта Java 9. из
  4. Карта Java 9. Записей
  5. Создайте функцию для возврата карты
  6. Статический инициализатор
  7. Java 8, поток простого ввода
  8. Вывод

После инициализации хэш-карты , результатом будет либо изменяемая карта , либо неизменяемая карта :

  • Изменяемая карта – Это означает, что мы можем изменять записи Map .
  • Неизменяемая карта – Это означает, что мы не можем добавлять или изменять записи Map , и если мы изменим их, это приведет к Исключение UnsupportedOperationException .

1. Инициализация хэш-карты (стандартная)

Этот пример является стандартным способом Java для объявления и инициализации хэш-карты . В результате получается изменяемая карта, и мы можем использовать Collections.unmodifiableMap для преобразования изменяемой карты в неизменяемую карту.

  // normal way, mutable map
  Map map = 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
  Map map = 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
  Map map = 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 записей или элементов.

  static  Map 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.
  Map map = 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.
  Map map = 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 Map map;
  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
  Map map = 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 .

  1. Инициализация хэш-карты (стандартная) – Самый лучший.
  2. Коллекции.singletonmap – Меньше вариантов использования.
  3. Карта Java 9.of – Если у вас есть Java 9 и вы хотите создать неизменяемую карту.
  4. Java 9 Map.ofEntries – То же, что и выше.
  5. Создайте функцию для возврата карты – Она работает везде.
  6. Статический инициализатор – Для переменной статической Карты.
  7. Java 8, Поток простого ввода – Не используйте это, если только вы не хотите продемонстрировать умение Java 8.

Скачать Исходный Код

$клон git $клон git

$cd java-базовый/коллекции

Рекомендации

Оригинал: “https://mkyong.com/java/how-to-initialize-a-hashmap-in-java/”