enummap java_Java之集合(十)EnumMap

1.前言

本章介绍Map体系中的EnumMap,该类是专门针对枚举类设计的一个集合类。集合中的所有键必须是同一个枚举类的实例。当EnumMap创建后,会表现成一个数组array,这种表现方式是紧凑高效的。EnumMap的顺序,由枚举类实例的定义顺序决定。集合视图的迭代器是弱一致(weakly consistent)的,不会抛出并发异常ConcurrentModificationException。当迭代器运行时不会展示另一个线程对map的修改。空的键是不被允许的。线程不安全,最好在创建的时候调用Collections#synchronizedMap方法来进行同步。注意,所有基础操作都是常量级时间。

2.EnumMap

4a8ce4736cf0bbc90d466d0b252feea7.png

上面就是EnumMap的一个基本结果了。keyType是枚举类的Class对象,keyUniverse是枚举类按顺序下来的实例对象,存放在数组中。vals就是对应键的值,下标相同就是一对。size就是大小了,NULL是没有查询到键时的结果。从这个结构可以看出,EnumMap的操作应该是很快的,都是数组。

11235901b692163cef55f6b6de47b935.png

put方法就简单了,检查其类型,再获取类中的顺序号,直接对应相应的key值就可以了。remove方法类似。

5e96b18b854b3bed04395d58a8ca2c1a.png

由于上面的原因,必须和类完全匹配才行,所以通过集合来构造的时候,实际上只是取了第一个元素的类型,然后才遍历放入对应的位置。

其它的也没有什么可说的,最后注意一下EnumMap由于其实现的特性,所以移除的时候键也不会移除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值