为什么使用EnumMap代替HashMap

时间:2018-11-21 06:49:53

标签: java hashmap enum-map

我们已经拥有HashMap,为什么要使用EnumMap

2 个答案:

答案 0 :(得分:8)

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

  

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

     

实施说明:所有基本操作均在固定时间内执行。它们可能(尽管不能保证)比其HashMap同行更快。

答案 1 :(得分:5)

使用EnumMap的主要原因是它专门针对枚举进行了优化。进一步的好处在下面提到。

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

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);