【发布时间】:2018-11-21 06:49:53
【问题描述】:
既然我们已经有了HashMap,为什么还要使用EnumMap?
【问题讨论】:
-
您阅读文档了吗?
-
正如文档所说这种表示非常紧凑和高效。
既然我们已经有了HashMap,为什么还要使用EnumMap?
【问题讨论】:
Javadoc 提出了一个很好的论点:
枚举映射在内部表示为数组。这种表示非常紧凑和高效。
实现说明:所有基本操作都在恒定时间内执行。它们可能(尽管不能保证)比 HashMap 对应物更快。
【讨论】:
EnumMap 的源代码,以便查看在预先知道整个“使用空间”时可以采用的快捷方式(因为enums 是不变的。)
int,都是为了提高效率。
EnumMap 的主要原因是它专门针对枚举进行了优化。更多好处如下所述。
1) EnumMap 和 HashMap 的首要区别在于 EnumMap 针对枚举键进行了优化,而 HashMap 是类似于 Hashtable 的通用 Map 实现。您不能使用 Enum 以外的任何类型作为 EnumMap 中的键,但您可以同时使用 Enum 和任何其他对象作为 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);
【讨论】: