Java集合框架源码研读-EnumMap

前面已经介绍了好多Map了,今天再来介绍一个,跟Enum相关的Map, EnumMap.

那么这个Map跟之前介绍的那些Map有什么区别呢?

EnumMap的key,必须是Enum类型的.

实际上,它实现起来非常简单.

我们可以通过Enum类型的values()方法来获取到一个Enum中所有数据的数组.

那这不就很简单了吗?

EnumMap中维护着一个key的数组(keyUniverse)和一个value的数组(vals).由Enum的性质,我们可以知道,Enum.values()得到的数组,一定是定长的,并且其中的数据是不重复的.

所以,keyUniverse以及vals的长度都可以是固定的,没有动态扩容的问题.

所以,我们在插入数据时,比如put(K key, V value)方法,我们可以先获取key在原Enum中的位置,然后在vals的给定位置中,插入数据.

就这样,很简单吧?

它内部也没有一些难懂的操作.

唯一有一个稍微难懂一点的方法就是getKeyUniverse(Class<K> keyType):

这个方法的作用就是获取Enum中所有的数据,并返回一个数组.

EnumMap由于其实现特性,所以,它的性能相对于HashMap等高一些,因为它没有碰撞的问题,也没有扩容的问题.所以基本上所有的操作的时间复杂度都是O(1).

它也允许Null值.

另外,跟其他的Map一样,EnumMap也是非线程安全的,但是它不是Fail-Fast的.

总的来说,如果你的key是一个枚举类型,那么用这个EnumMap要好一些.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容