Когда выбрать EnumMap вместо HashMap В стандартной библиотеке | Библиотека джависта | Java, Spring, Maven, Hibernate

Когда выбрать EnumMap вместо HashMap

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

Логика выбора коллекции

HashMap — универсальный ключ-значение, хранит что угодно, но тратит память на hashCode.
TreeMap — ключи в отсортированном порядке, но медленнее.
LinkedHashMap — хранит порядок вставки.
EnumMap — заточен под enum-ключи, самый быстрый и компактный для этого случая.

Почему EnumMap крут

Использует массив под капотом, а не хеш-таблицу — значит, lookup работает за O(1) без вычисления хэшей.
Очень экономен по памяти (не хранит объекты Map.Entry).
Гарантированно хранит ключи в порядке объявления enum-констант.

Пример

enum Status { NEW, IN_PROGRESS, DONE }

EnumMap map = new EnumMap<>(Status.class);
map.put(Status.NEW, "Создан");
map.put(Status.IN_PROGRESS, "В работе");
map.put(Status.DONE, "Завершён");

for (var entry : map.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}

Когда использовать

— Ключи всегда являются значениями одного enum.
— Важен быстрый доступ к элементам и сохранение порядка ключей.
— Необходимо минимизировать использование памяти.

Когда не подходит

— Ключи не являются enum.
— Требуется поддержка null в качестве ключа.

Расскажите про боевой кейс использования в комментах.

Библиотека джависта

#буст
Библиотека джависта | Java, Spring, Maven, Hibernate

Библиотека джависта | Java, Spring, Maven, Hibernate

@javaproglib
23.11K Подписчиков
Технологии Категория
Все самое полезное для Java-разработчика в одном канале. Список наших каналов: https://t.me/proglibrary/9197. Для обратной св...