Класс Java EnumMap: Руководство для начинающих

Введение

Привет, будущие программисты на Java! Сегодня мы отправляемся в захватывающее путешествие в мир класса Java EnumMap. Я знаю, что вы можете подумать: "EnumMap? Это сложно!" Но не волнуйтесь! К концу этого урока вы будете использовать EnumMap как профессионал, и, возможно, даже немного повеселитесь.

Java - EnumMap

Начнем с простой аналогии. Представьте себе, что у вас есть особый ящик для каждого дня недели, чтобы организовать носки. Вот и что такое EnumMap — это способ организовать данные, используя константы перечисления в качестве ключей. Круто, правда? Давайте погружемся!

Объявление класса

Сначала сначала, давайте посмотрим, как объявляется EnumMap:

import java.util.EnumMap;

enum DaysOfWeek { ПОНЕДЕЛЬ, ВТОРНИК, СРЕДА, ЧЕТВЕРГ, ПЯТНИЦА, СУББОТА, ВОСКРЕСЕНЬЕ }

EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

В этом примере мы создаем EnumMap, который использует наш перечисление DaysOfWeek в качестве ключей и String в качестве значений для хранения активностей. Часть DaysOfWeek.class сообщает Java, какое перечисление мы используем для ключей.

Конструкторы класса

EnumMap имеет три конструктора. Давайте рассмотрим каждый из них:

  1. EnumMap(Class keyType)

    EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

    Это создает пустой EnumMap с ключами заданного типа перечисления.

  2. EnumMap(EnumMap<K,? extends V> m)

    EnumMap<DaysOfWeek, String> activitiesCopy = new EnumMap<>(activities);

    Это создает EnumMap с тем же типом ключей, что и указанный EnumMap, и инициализирует его теми же отображениями (если таковые имеются).

  3. EnumMap(Map<K,? extends V> m)

    Map<DaysOfWeek, String> regularMap = new HashMap<>();
    regularMap.put(DaysOfWeek.PONEDELЬ, "Спортзал");
    EnumMap<DaysOfWeek, String> activitiesFromMap = new EnumMap<>(regularMap);

    Это создает EnumMap, инициализированный из обычного Map.

Методы класса

Теперь давайте рассмотрим некоторые из наиболее часто используемых методов в EnumMap:

Метод Описание
put(K key, V value) Связывает указанное значение с указанным ключом
get(Object key) Возвращает значение, связанное с указанным ключом
remove(Object key) Удаляет отображение для этого ключа, если оно существует
size() Возвращает количество ключ-значение отображений
clear() Удаляет все отображения из этого карты
containsKey(Object key) Возвращает true, если эта карта содержит отображение для указанного ключа
containsValue(Object value) Возвращает true, если эта карта отображает один или несколько ключей на указанное значение

Давайте посмотрим на эти методы в действии:

EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

// Добавление пар ключ-значение
activities.put(DaysOfWeek.PONEDELЬ, "Спортзал");
activities.put(DaysOfWeek.VTORNИK, "Кинотеатр");

// Получение значения
String mondayActivity = activities.get(DaysOfWeek.PONEDELЬ);
System.out.println("Активность понедельника: " + mondayActivity);

// Проверка наличия ключа
boolean hasWednesday = activities.containsKey(DaysOfWeek.SREDА);
System.out.println("Есть среда: " + hasWednesday);

// Удаление пары ключ-значение
activities.remove(DaysOfWeek.VTORNИK);

// Получение размера
int size = activities.size();
System.out.println("Количество активностей: " + size);

// Очистка карты
activities.clear();

В этом примере мы добавляем активности для разных дней, извлекаем значения, проверяем наличие ключей, удаляем записи и, наконец, очищаем всю карту. Это как организация и реорганизация нашего ящика для носок!

Наследуемые методы

EnumMap наследует методы от своих родительских классов. Вот некоторые полезные из них:

Метод Наследован от Описание
clone() AbstractMap Создает плоскую копию этой карты
equals(Object o) AbstractMap Сравнивает указанный объект с этой картой по равенству
hashCode() AbstractMap Возвращает значение хэш-кода для этой карты
toString() AbstractMap Возвращает строковое представление этой карты

Пример добавления ключ-значение в EnumMap с парой перечисление, целое число

Теперь попробуем что-то немного сложнее. Создадим EnumMap, который использует перечисление в качестве ключей и целые числа в качестве значений:

enum Fruit { APPLE, BANANA, ORANGE, MANGO }

EnumMap<Fruit, Integer> fruitPrices = new EnumMap<>(Fruit.class);

// Добавление пар ключ-значение
fruitPrices.put(Fruit.APPLE, 100);
fruitPrices.put(Fruit.BANANA, 80);
fruitPrices.put(Fruit.ORANGE, 120);
fruitPrices.put(Fruit.MANGO, 150);

// Печать EnumMap
System.out.println("Цены на фрукты: " + fruitPrices);

// Обновление значения
fruitPrices.put(Fruit.BANANA, 90);

// Получение конкретного значения
int applePrice = fruitPrices.get(Fruit.APPLE);
System.out.println("Цена на яблоко: " + applePrice);

// Итерация по EnumMap
for (Map.Entry<Fruit, Integer> entry : fruitPrices.entrySet()) {
System.out.println(entry.getKey() + ": $" + entry.getValue());
}

В этом примере мы создаем список цен на фрукты. Мы добавляем цены для разных фруктов, обновляем цену бананов, получаем цену яблок и затем итерируемся по всей карте, чтобы вывести цены всех фруктов.

И вот и все! Вы только что изучили основы класса Java EnumMap. Помните, практика совершенства, так что не стесняйтесь экспериментировать с этими концепциями. Кто знает? Возможно, вы захотите организовать всю свою жизнь с помощью EnumMap! (Жалко, это шутка, но они действительно полезны.)

Счастливого кодирования, и пусть ваши EnumMap всегда будут хорошо организованы!

Credits: Image by storyset