EnumMap
实现Map接口,基于数组实现,用于存储key为枚举类型的键值对集合类。
- 其中K,V 使用双数组实现。Key为枚举类型。
- 在枚举中,每个枚举对象对应一个ordinal唯一值,因此在寻址时候,可使用ordinal作为数组下标进行寻址,速度很快。
- 效率比HashMap要高,且大多数基本操作是常数级。
- 多线程不安全,可使用synchronizedMap包装器 支持多线程安全。
- 集合内部的key按自然序排列,Key不能插入空。
- 使用集合视图的迭代器迭代元素时,如果Map被其他线程修改了。不会抛出ConcurrentModificationException异常。因此集合视图迭代时不保证数据是一致的。
EnumSet
专为枚举类型设计的抽象集合类。其中保存的元素必须是指定枚举类型的枚举值。
- 线程不安全、不能插入null。
- 插入枚举元素按自然序排列【定义时的顺序】。
- 内部以long类型的位向量存储枚举值,占用空间小;操作基于位运算,效率高、所有操作都是常数级。
- EnumSet有两个实现类,RegularEnumSet,JumboEnumSet。当使用EnumSet时,枚举值集合大于64的时候,创建的是JumboEnumSet,否则创建的是RegularEnumSet。