我们已经拥有HashMap
,为什么要使用EnumMap
?
答案 0 :(得分:8)
Javadoc提出了一个很好的论据:
枚举映射在内部表示为数组。这种表示非常紧凑和高效。
实施说明:所有基本操作均在固定时间内执行。它们可能(尽管不能保证)比其HashMap同行更快。
答案 1 :(得分:5)
使用EnumMap的主要原因是它专门针对枚举进行了优化。进一步的好处在下面提到。
1)EnumMap和HashMap之间的首要差异是EnumMap针对枚举键进行了优化,而HashMap是类似于Hashtable的通用Map实现。您不能在EnumMap中使用除Enum以外的任何其他类型,但在HashMap中可以将Enum和任何其他Object用作键。
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);