Класс EnumMap
Класс EnumMap - это специализированная реализация
интерфейса Map, предназначенная для работы с ключами
типа enum. Все ключи в такой карте должны принадлежать
одному и тому же перечислению, которое задаётся при создании
карты. В отличие от HashMap, класс EnumMap
хранит элементы во внутреннем массиве, индексируемом
порядковым номером константы перечисления. Благодаря этому
операции добавления, поиска и удаления выполняются очень
быстро и предсказуемо. При обходе карты элементы возвращаются
в естественном порядке объявления констант перечисления.
В конструктор карты мы передаём объект Class
перечисления, а при необходимости - другую карту того же типа
для копирования её содержимого.
Синтаксис
EnumMap<EnumType, ValueType> map = new EnumMap<>(EnumType.class);
EnumMap<EnumType, ValueType> map = new EnumMap<>(otherMap);
Пример
Давайте создадим карту EnumMap для перечисления
дней недели и заполним её значениями:
import java.util.EnumMap;
public class Main
{
enum Day
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY
}
public static void main(String[] args)
{
EnumMap<Day, String> map = new EnumMap<>(Day.class);
map.put(Day.MONDAY, "a");
map.put(Day.TUESDAY, "b");
map.put(Day.WEDNESDAY, "c");
System.out.println(map);
}
}
Результат выполнения кода:
{MONDAY=a, TUESDAY=b, WEDNESDAY=c}
Пример
Давайте получим значение по ключу и проверим наличие ключа в карте:
import java.util.EnumMap;
public class Main
{
enum Day
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY
}
public static void main(String[] args)
{
EnumMap<Day, String> map = new EnumMap<>(Day.class);
map.put(Day.MONDAY, "abcde");
map.put(Day.TUESDAY, "12345");
System.out.println(map.get(Day.MONDAY));
System.out.println(map.containsKey(Day.WEDNESDAY));
}
}
Результат выполнения кода:
"abcde"
false
Пример
Давайте создадим одну карту на основе другой и посмотрим, в каком порядке обхода возвращаются элементы:
import java.util.EnumMap;
public class Main
{
enum Day
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY
}
public static void main(String[] args)
{
EnumMap<Day, String> map = new EnumMap<>(Day.class);
map.put(Day.FRIDAY, "e");
map.put(Day.MONDAY, "a");
map.put(Day.WEDNESDAY, "c");
EnumMap<Day, String> res = new EnumMap<>(map);
System.out.println(res);
System.out.println(res.size());
}
}
Результат выполнения кода:
{MONDAY=a, WEDNESDAY=c, FRIDAY=e}
3
Смотрите также
-
интерфейс
Map,
который описывает базовый контракт всех карт -
класс
LinkedHashMap,
который сохраняет порядок добавления элементов -
класс
WeakHashMap,
который хранит ключи по слабым ссылкам -
класс
IdentityHashMap,
который сравнивает ключи по ссылке