JAVA - EnumMap与EnumSet简单总结

EnumMap

实现Map接口,基于数组实现,用于存储key为枚举类型的键值对集合类。

  1. 其中K,V 使用双数组实现。Key为枚举类型。
  2. 在枚举中,每个枚举对象对应一个ordinal唯一值,因此在寻址时候,可使用ordinal作为数组下标进行寻址,速度很快。
  3. 效率比HashMap要高,且大多数基本操作是常数级。
  4. 多线程不安全,可使用synchronizedMap包装器 支持多线程安全。
  5. 集合内部的key按自然序排列,Key不能插入空。
  6. 使用集合视图的迭代器迭代元素时,如果Map被其他线程修改了。不会抛出ConcurrentModificationException异常。因此集合视图迭代时不保证数据是一致的。

EnumSet

专为枚举类型设计的抽象集合类。其中保存的元素必须是指定枚举类型的枚举值。

  1. 线程不安全、不能插入null。
  2. 插入枚举元素按自然序排列【定义时的顺序】。
  3. 内部以long类型的位向量存储枚举值,占用空间小;操作基于位运算,效率高、所有操作都是常数级。
  4. EnumSet有两个实现类,RegularEnumSet,JumboEnumSet。当使用EnumSet时,枚举值集合大于64的时候,创建的是JumboEnumSet,否则创建的是RegularEnumSet。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值