> 文章列表 > 【Java】EnumSet的使用

【Java】EnumSet的使用

【Java】EnumSet的使用

一、什么是EnumSet?

EnumSet是用于枚举类的专用Set集合。
它实现了Set接口并且继承AbstractSet。

【Java】EnumSet的使用

当计划使用EnumSet时,必须考虑以下几点:
1、它只能包含枚举值,并且所有值必须属于同一个枚举。
2、它不允许添加 null,在尝试这样做时会抛出NullPointerException。
3、它不是线程安全的,所以如果需要,我们需要在外部同步它。
4、元素按照在枚举中声明的顺序存储。
5、它使用在副本上工作的fail-safe迭代器,因此如果在迭代时修改了集合,它不会抛出ConcurrentModificationException。

二、为什么要使用EnumSet?

作为一个经验法则,当我们存储枚举值时,EnumSet应该总是优先于任何其他Set实现。

EnumSet是一个公共抽象类,它包含多个允许我们创建实例的静态工厂方法。JDK提供了两种不同的实现,是package-private和支持bit vector的:

  • RegularEnumSet
  • JumboEnumSet

RegularEnumSet使用一个long来表示位向量。long元素的每一位代表枚举的一个值。枚举的第i个值将存储在第i位,因此很容易知道值是否存在。由于long是64位数据类型,因此该实现最多可以存储64个元素。

另一方面,JumboEnumSet使用long elements数组作为位向量。这允许该实现存储超