正如我们已经拥有HashMap
的那样,我们为什么要使用EnumMap
?
问问题
9984 次
2 回答
25
Javadoc提出了一个很好的论点:
枚举映射在内部表示为数组。这种表示非常紧凑和高效。
实施说明:所有基本操作都在恒定时间内执行。它们很可能(尽管不能保证)比它们的 HashMap 对应物更快。
于 2018-11-21T06:53:07.733 回答
14
EnumMap 的主要原因是它专门针对枚举进行了优化。进一步的好处如下所述。
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 回答