Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Освоение Java EnumMap: эффективное отображение ключ-значение с перечислениями

Java EnumMap

В этом руководстве мы изучим класс Java EnumMap и его операции с помощью примеров.

Класс EnumMap из Java Collections Framework предоставляет реализацию карты для элементов перечисления (enum).

В EnumMap элементы enum используются как ключи. Он реализует интерфейс Map.


Создание EnumMap

Для создания enum-карты сначала импортируйте пакет java.util.EnumMap. После импорта пакета, вот как можно создавать enum-карты в Java.

enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);

В приведённом примере мы создали enum-карту с именем sizes.

Здесь:


Методы EnumMap

Класс EnumMap предоставляет методы, позволяющие выполнять различные операции над enum-картами.


Вставка элементов в EnumMap

Например:

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Создание EnumMap для enum Size
        EnumMap<Size, Integer> sizes1 = new EnumMap<>(Size.class);
        // Использование метода put()
        sizes1.put(Size.SMALL, 28);
        sizes1.put(Size.MEDIUM, 32);
        System.out.println("EnumMap1: " + sizes1);
        EnumMap<Size, Integer> sizes2 = new EnumMap<>(Size.class);
        // Использование метода putAll()
        sizes2.putAll(sizes1);
        sizes2.put(Size.LARGE, 36);
        System.out.println("EnumMap2: " + sizes2);
    }
}

Вывод

EnumMap1: {SMALL=28, MEDIUM=32} EnumMap2: {SMALL=28, MEDIUM=32, LARGE=36}

В примере мы использовали метод putAll() для вставки всех элементов enum-карты sizes1 в enum-карту sizes2.

Также возможно вставлять элементы из других карт, таких как HashMap, TreeMap и т.д., в enum-карту с помощью putAll(). Однако все карты должны быть одного и того же enum-типа.


Доступ к элементам EnumMap

1. Использование entrySet(), keySet() и values()

Например:

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Создание EnumMap для enum Size
        EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
        sizes.put(Size.SMALL, 28);
        sizes.put(Size.MEDIUM, 32);
        sizes.put(Size.LARGE, 36);
        sizes.put(Size.EXTRALARGE, 40);
        System.out.println("EnumMap: " + sizes);
        // Использование метода entrySet()
        System.out.println("Key/Value mappings: " + sizes.entrySet());
        // Использование метода keySet()
        System.out.println("Keys: " + sizes.keySet());
        // Использование метода values()
        System.out.println("Values: " + sizes.values());
    }
}

Вывод

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} Key/Value mappings: [SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40] Keys: [SMALL, MEDIUM, LARGE, EXTRALARGE] Values: [28, 32, 36, 40]

2. Использование метода get()

Метод get() возвращает значение, ассоциированное с указанным ключом. Возвращает null, если указанный ключ не найден.

Например:

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Создание EnumMap для enum Size
        EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
        sizes.put(Size.SMALL, 28);
        sizes.put(Size.MEDIUM, 32);
        sizes.put(Size.LARGE, 36);
        sizes.put(Size.EXTRALARGE, 40);
        System.out.println("EnumMap: " + sizes);
        // Использование метода get()
        int value = sizes.get(Size.MEDIUM);
        System.out.println("Value of MEDIUM: " + value);
    }
}

Вывод

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} Value of MEDIUM: 32

Удаление элементов EnumMap

Например:

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Создание EnumMap для enum Size
        EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
        sizes.put(Size.SMALL, 28);
        sizes.put(Size.MEDIUM, 32);
        sizes.put(Size.LARGE, 36);
        sizes.put(Size.EXTRALARGE, 40);
        System.out.println("EnumMap: " + sizes);
        // Использование метода remove()
        int value = sizes.remove(Size.MEDIUM);
        System.out.println("Removed Value: " + value);
        boolean result = sizes.remove(Size.SMALL, 28);
        System.out.println("Is the entry {SMALL=28} removed? " + result);
        System.out.println("Updated EnumMap: " + sizes);
    }
}

Вывод

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} Removed Value: 32 Is the entry {SMALL=28} removed? True Updated EnumMap: {LARGE=36, EXTRALARGE=40}

Замена элементов EnumMap

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Создание EnumMap для enum Size
        EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
        sizes.put(Size.SMALL, 28);
        sizes.put(Size.MEDIUM, 32);
        sizes.put(Size.LARGE, 36);
        sizes.put(Size.EXTRALARGE, 40);
        System.out.println("EnumMap: " + sizes);
        // Использование метода replace()
        sizes.replace(Size.MEDIUM, 30);
        sizes.replace(Size.LARGE, 36, 34);
        System.out.println("EnumMap using replace(): " + sizes);
        // Использование метода replaceAll()
        sizes.replaceAll((key, oldValue) -> oldValue + 3);
        System.out.println("EnumMap using replaceAll(): " + sizes);
    }
}

Вывод

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} EnumMap using replace(): {SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40} EnumMap using replaceAll(): {SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43}

В приведённой программе обратите внимание на инструкцию

sizes.replaceAll((key, oldValue) -> oldValue + 3);

Здесь метод обращается ко всем записям карты. Затем он заменяет все значения на новые, предоставленные лямбда-выражением.


Другие методы

МетодОписание
clone()Создаёт копию EnumMap
containsKey()Ищет в EnumMap указанный ключ и возвращает boolean
containsValue()Ищет в EnumMap указанное значение и возвращает boolean
size()Возвращает размер EnumMap
clear()Удаляет все записи из EnumMap

EnumSet против EnumMap

И EnumSet, и класс EnumMap предоставляют структуры данных для хранения значений enum. Однако между ними существуют существенные различия.


Интерфейсы Cloneable и Serializable

Класс EnumMap также реализует интерфейсы Cloneable и Serializable.

Cloneable Interface

Он позволяет классу EnumMap создавать копии экземпляров класса.

Serializable Interface

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

Интерфейс Serializable позволяет классам быть сериализованными. Это означает, что объекты классов, реализующих Serializable, могут быть преобразованы в биты или байты.

java

  1. Перечисления в C: определение, объявление и операции с флагами
  2. Освоение операторов Java: типы, синтаксис и практические примеры
  3. Комментарии в Java: типы, использование и лучшие практики
  4. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  5. Освоение строк в Java: создание, методы и лучшие практики
  6. Интерфейсы в Java: концепции, реализация и лучшие практики
  7. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  8. Перечисления (Enums) в Java: полное руководство по enum и enum-классам
  9. Конструкторы в Java Enums: объяснение с практическим примером
  10. Строковые представления в Java Enums: настройка toString() и лучшие практики