为什么使用EnumMap而不是HashMap

2022-09-01 14:24:38

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


答案 1

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

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

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


答案 2

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和任何其他对象作为键。

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

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

int index = ((Enum)key).ordinal();
Object oldValue = vals[index];
vals[index] = maskNull(value);