English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве мы изучим Java EnumMap класс и его операции с помощью примеров
Класс EnumMap в Java Collection Framework предоставляет реализацию маппинга для элементов-эnum
В EnumMap элементы-эnum используются в качествеКлюч. Оно реализуетИнтерфейс Map.
Перед изучением EnumMap, убедитесь, что вы понимаетеJava энум.
Чтобы создать маппинг, сначала необходимо импортировать пакет java.util.EnumMap. После импорта пакета можно использовать Java для создания маппинга
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
В примере выше мы создали маппинг под названием sizes
Здесь,
Size - количество маппингов к значениям枚举Ключ
Integer - связанный с соответствующим ключом 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 и т.д.) в маппинг枚рузий. Но все маппинги должны иметь одинаковый тип枚рузий.
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
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}
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 внутренне представлено битовыми последовательностями, а энум-мапы внутренне представлено массивами.
EnumSet создается с использованием предопределенных методов, таких как allOf(), noneOf(), of() и т.д. Однако, энум-мапы создаются с использованием их конструктора.
Класс EnumMap также реализует интерфейсы Cloneable и Serializable.
Cloneable КлонированиеИнтерфейс
Он позволяет копировать экземпляры класса EnumMap.
Интерфейс Serializable для сериализуемых
Каждый раз, когда необходимо передавать Java объект через сеть, его необходимо преобразовать в биты или байты. Это потому, что Java объекты не могут передаваться через сеть.
Интерфейс Serializable позволяет классам быть сериализованными. Это означает, что Serializable может преобразовать объект класса, реализующего этот интерфейс, в биты или байты.