English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Java

Java Управление потоком

Java Массив

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений в Java

Java Список (List)

Java Queue (очередь)

Java Map-сборник

Java Set-сборник

Java Вход/Выход (I/O)

Java Reader/Writer

Другие темы Java

Java EnumMap

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

Класс EnumMap в Java Collection Framework предоставляет реализацию маппинга для элементов-эnum

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

Перед изучением EnumMap, убедитесь, что вы понимаетеJava энум.

Создание EnumMap

Чтобы создать маппинг, сначала необходимо импортировать пакет java.util.EnumMap. После импорта пакета можно использовать Java для создания маппинга

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

В примере выше мы создали маппинг под названием sizes

Здесь,

  • Size - количество маппингов к значениям枚举Ключ

  • Integer - связанный с соответствующим ключом EnumMapЗначение

Методы EnumMap

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

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

  • put() - Вставляет заданную пару ключ/значение (элемент) в маппинг

  • putAll() - Вставляет все элементы из заданного маппинга в этот маппинг

Например:

import java.util.EnumMap;
class Main {
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {
        // Создание EnumMap для типа 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() для вставки всех элементов маппинга size1 в маппинг size2.

Также можно использовать putAll() для вставки элементов других маппингов (например, HashMap, TreeMap и т.д.) в маппинг枚рузий. Но все маппинги должны иметь одинаковый тип枚рузий.

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

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

  • entrySet() - возвращает набор всех маппингов ключ/значение маппинга枚рузий

  • keySet() - возвращает набор всех ключей маппинга枚рузий

  • values() - возвращает набор всех значений маппинга枚рузий

Например:

import java.util.EnumMap;
class Main {
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {
        // Создание EnumMap для枚举 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("Маппинг ключ/значение: " + sizes.entrySet());
        // Использование метода keySet()
        System.out.println("Ключи: " + sizes.keySet());
        // Использование метода values()
        System.out.println("Значения: " + sizes.values());
    }
}

Результат вывода

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
Маппинг ключ/значение: [SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40]
Ключи: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Значения: [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 для枚举 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("Значение MEDIUM: " + value);
    }
}

Результат вывода

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
Значение MEDIUM: 32

Удалить элемент EnumMap

  • remove(key) - Возвратить и удалить элемент из карты, связанный с указанным ключом

  • remove(key, value) - Удалить элемент из карты, если ключ связан с указанным значением и вернуть булево значение

Например:

import java.util.EnumMap;
class Main {
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {
        // Создание EnumMap для枚举 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("Удаленное значение: " + value);
        boolean result = sizes.remove(Size.SMALL, 28);
        System.out.println("Элемент {SMALL=28} удален? " + result);
        System.out.println("Обновленный EnumMap: " + sizes);
    }
}

Результат вывода

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
Удаленное значение: 32
Элемент {SMALL=28} удален? True
Обновленный EnumMap: {LARGE=36, EXTRALARGE=40}

Заменить элемент EnumMap

  • replace(key, value) - Заменить значение, связанное с ключом key, на value

  • replace(key, old, new) - Заменить old значением new только если old уже связан с ключом key

  • replaceAll(function) - Заменить каждый элемент карты значениями, полученными из указанной функции

import java.util.EnumMap;
class Main {
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {
        // Создание EnumMap для枚举 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("Использование метода replace(): " + sizes);
        // Использование метода replaceAll()
        sizes.replaceAll((key, oldValue) -> oldValue + 3);
        System.out.println("Использование метода replaceAll(): " + sizes);
    }
}

Результат вывода

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
Использование метода replace(): {SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40}
Использование метода replaceAll(): {SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43}

В предыдущем примере обратите внимание на следующие строки

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

В этом случае该方法 доступна для всех элементов карты. Затем он заменяет все значения наЛямбда-выражениеПредоставляемые новые значения.

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

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

Различие между EnumSet и EnumMap

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

  • EnumSet внутренне представлено битовыми последовательностями, а энум-мапы внутренне представлено массивами.

  • EnumSet создается с использованием предопределенных методов, таких как allOf(), noneOf(), of() и т.д. Однако, энум-мапы создаются с использованием их конструктора.

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

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

Cloneable КлонированиеИнтерфейс

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

Интерфейс Serializable для сериализуемых

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

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