Зачем использовать 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);