26

正如我们已经拥有HashMap的那样,我们为什么要使用EnumMap

4

2 回答 2

25

Javadoc提出了一个很好的论点:

枚举映射在内部表示为数组。这种表示非常紧凑和高效。

实施说明:所有基本操作都在恒定时间内执行。它们很可能(尽管不能保证)比它们的 HashMap 对应物更快。

于 2018-11-21T06:53:07.733 回答
14

EnumMap 的主要原因是它专门针对枚举进行了优化。进一步的好处如下所述。

https://javarevisited.blogspot.com/2012/09/difference-between-enummap-and-hashmap-in-java-vs.html#axzz5XTB1xBUe获得帮助

1) EnumMap 和 HashMap 之间的首要区别是 EnumMap 针对枚举键进行了优化,而 HashMap 是类似于 Hashtable 的通用 Map 实现。您不能使用 Enum 以外的任何类型作为 EnumMap 中的键,但您可以使用 Enum 和任何其他 Object 作为 HashMap 中的键。

2) EnumMap 和 HashMap 的另一个区别是性能。如上一点所述,由于对 Enum 键进行了专门的优化,在使用枚举作为键对象时,EnumMap 可能比 HashMap 执行得更好。

3) 可以认为是 HashMap 和 EnumMap 之间的区别的另一件事是碰撞概率。由于 Enum 在内部维护为数组,并且它们使用 ordinal() 以自然顺序存储,如下面的代码所示,取自 EnumMap 的 put() 方法

int index = ((Enum)key).ordinal();
Object oldValue = vals[index];
vals[index] = maskNull(value);
于 2018-11-21T06:53:21.520 回答