Зачем использовать EnumMap вместо HashMap

Как у нас уже есть HashMapзачем нам использовать EnumMap?

2 ответа

Javadoc приводит довольно хороший аргумент:

Enum карты представлены внутри как массивы. Это представление чрезвычайно компактно и эффективно.

Примечание по реализации: Все основные операции выполняются в постоянное время. Вероятно, они (хотя и не гарантированы) будут быстрее, чем их аналоги из HashMap.

Основная причина EnumMap заключается в том, что он специально оптимизирован для перечислений. Другие преимущества указаны ниже.

Получена помощь от https://javarevisited.blogspot.com/2012/09/difference-between-enummap-and-hashmap-in-java-vs.html

1) Первое и главное отличие между EnumMap и HashMap заключается в том, что EnumMap оптимизирован для ключей enum, а HashMap - это реализация Map общего назначения, аналогичная Hashtable. вы не можете использовать любой тип, кроме Enum, в качестве ключа в EnumMap, но вы можете использовать и Enum, и любой другой объект в качестве ключа в HashMap.

2) Еще одно различие между EnumMap и HashMap - это производительность. как обсуждалось в предыдущем пункте, благодаря специальной оптимизации, выполненной для ключей Enum, EnumMap, вероятно, будет работать лучше, чем HashMap, при использовании enum в качестве ключевого объекта.

3) Еще одна вещь, которую можно рассматривать как разницу между HashMap и EnumMap, - это вероятность столкновения. Поскольку Enum внутренне поддерживается как массив, и они хранятся в их естественном порядке с использованием ordinal(), как показано в следующем коде, который взят из метода put() EnumMap

int index = ((Enum)key).ordinal();
Object oldValue = vals[index];
vals[index] = maskNull(value);
Другие вопросы по тегам