Класс Java EnumMap: Руководство для начинающих
Введение
Привет, будущие программисты на Java! Сегодня мы отправляемся в захватывающее путешествие в мир класса Java EnumMap. Я знаю, что вы можете подумать: "EnumMap? Это сложно!" Но не волнуйтесь! К концу этого урока вы будете использовать EnumMap как профессионал, и, возможно, даже немного повеселитесь.
Начнем с простой аналогии. Представьте себе, что у вас есть особый ящик для каждого дня недели, чтобы организовать носки. Вот и что такое EnumMap — это способ организовать данные, используя константы перечисления в качестве ключей. Круто, правда? Давайте погружемся!
Объявление класса
Сначала сначала, давайте посмотрим, как объявляется EnumMap:
import java.util.EnumMap;
enum DaysOfWeek { ПОНЕДЕЛЬ, ВТОРНИК, СРЕДА, ЧЕТВЕРГ, ПЯТНИЦА, СУББОТА, ВОСКРЕСЕНЬЕ }
EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);
В этом примере мы создаем EnumMap, который использует наш перечисление DaysOfWeek
в качестве ключей и String
в качестве значений для хранения активностей. Часть DaysOfWeek.class
сообщает Java, какое перечисление мы используем для ключей.
Конструкторы класса
EnumMap имеет три конструктора. Давайте рассмотрим каждый из них:
-
EnumMap(Class
keyType) EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);
Это создает пустой EnumMap с ключами заданного типа перечисления.
-
EnumMap(EnumMap<K,? extends V> m)
EnumMap<DaysOfWeek, String> activitiesCopy = new EnumMap<>(activities);
Это создает EnumMap с тем же типом ключей, что и указанный EnumMap, и инициализирует его теми же отображениями (если таковые имеются).
-
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