java.util

接口
异常
错误
java.lang.Object
  继承者 java.util.AbstractCollection<E>
      继承者 java.util.AbstractSet<E>
          继承者 java.util.EnumSet<E>
所有已实现的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>

public abstract class EnumSet<E extends Enum<E>>
     
extends AbstractSet<E>
implements Cloneable, Serializable

与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。如果其参数也是一个枚举 set,则批量操作(如 containsAllretainAll)也应运行得非常快。

iterator 方法返回的迭代器按其自然顺序 遍历这些元素(该顺序是声明枚举常量的顺序)。返回的迭代器是弱一致的:它从不抛出 ConcurrentModificationException,也不一定显示在迭代进行时发生的任何 set 修改的效果。

不允许使用 null 元素。试图插入 null 元素将抛出 NullPointerException。但是,试图测试是否出现 null 元素或移除 null 元素将不会抛出异常。

像大多数 collection 实现一样,EnumSet 是不同步的。如果多个线程同时访问一个枚举 set,并且至少有一个线程修改该 set,则此枚举 set 在外部应该是同步的。这通常是通过对自然封装该枚举 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSet(java.util.Set ) 方法来“包装”该 set。最好在创建时完成这一操作,以防止意外的非同步访问:

 Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class));
 

实现注意事项:所有基本操作都在固定时间内执行。虽然并不保证,但它们很可能比其 HashSet 副本更快。如果其参数也是一个枚举 set ,则批量操作会在固定时间内执行。

此类是 Java Collections Framework 的成员。

从以下版本开始:
1.5
另请参见:
EnumMap

方法摘要
static
<E extends Enum<E>>
EnumSet<E>
allOf(Class<E> elementType)
          创建一个包含指定元素类型的所有元素的枚举 set。
 EnumSet<E> clone()
          返回 set 的副本。
static
<E extends Enum<E>>
EnumSet<E>
complementOf(EnumSet<E> s)
          创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含指定 set 中所 包含的此类型的所有元素。
static
<E extends Enum<E>>
EnumSet<E>
copyOf(Collection<E> c)
          创建一个从指定 collection 初始化的枚举 set。
static
<E extends Enum<E>>
EnumSet<E>
copyOf(EnumSet<E> s)
          创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含相同的元素(如果有的话)。
static
<E extends Enum<E>>
EnumSet<E>
noneOf(Class<E> elementType)
          创建一个具有指定元素类型的空枚举 set。
static
<E extends Enum<E>>
EnumSet<E>
of(E e)
          创建一个最初包含指定元素的枚举 set。
static
<E extends Enum<E>>
EnumSet<E>
of(E first, E... rest)
          创建一个最初包含指定元素的枚举 set。
static
<E extends Enum<E>>
EnumSet<E>
of(E e1, E e2)
          创建一个最初包含指定元素的枚举 set。
static
<E extends Enum<E>>
EnumSet<E>
of(E e1, E e2, E e3)
          创建一个最初包含指定元素的枚举 set。
static
<E extends Enum<E>>
EnumSet<E>
of(E e1, E e2, E e3, E e4)
          创建一个最初包含指定元素的枚举 set。
static
<E extends Enum<E>>
EnumSet<E>
of(E e1, E e2, E e3, E e4, E e5)
          创建一个最初包含指定元素的枚举 set。
static
<E extends Enum<E>>
EnumSet<E>
range(E from, E to)
          创建一个最初包含由两个指定端点所定义范围内的所有元素的枚举 set。
 
从类 java.util.AbstractSet 继承的方法
equals, hashCode, removeAll
 
从类 java.util.AbstractCollection 继承的方法
add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, retainAll, size, toArray, toArray, toString
 
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 
从接口 java.util.Set 继承的方法
add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, retainAll, size, toArray, toArray
 

方法详细信息

noneOf

public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType)
创建一个具有指定元素类型的空枚举 set。

参数:
elementType - 此枚举 set 的元素类型的 class 对象
抛出:
NullPointerException - 如果 elementType 为 null

allOf

public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
创建一个包含指定元素类型的所有元素的枚举 set。

参数:
elementType - 此枚举 set 的元素类型的 class 对象
抛出:
NullPointerException - 如果 elementType 为 null

copyOf

public static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s)
创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含相同的元素(如果有的话)。

参数:
s - 用于初始化此枚举 set 的枚举 set
抛出:
NullPointerException - 如果 s 为 null

copyOf

public static <E extends Enum<E>> EnumSet<E> copyOf(Collection<E> c)
创建一个从指定 collection 初始化的枚举 set。如果指定的 collection 是一个 EnumSet 实例,则此静态工厂方法的功能与 copyOf(EnumSet) 相同。否则,指定的 collection 必须至少包含一个元素(以确定新枚举 set 的元素类型)。

参数:
c - 用于初始化此枚举 set 的 collection
抛出:
IllegalArgumentException - 如果 c 不是一个 EnumSet 实例,并且不包含元素
NullPointerException - 如果 c 为 null

complementOf

public static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s)
创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含指定 set 中所 包含的此类型的所有元素。

参数:
s - 用其补码初始化此枚举 set 的枚举 set
抛出:
NullPointerException - 如果 s 为 null

of

public static <E extends Enum<E>> EnumSet<E> of(E e)
创建一个最初包含指定元素的枚举 set。 用 1 到 5 个元素重载此方法,从而初始化一个枚举 set。第 6 次重载使用变量参数功能。此重载可能创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。

参数:
e - 此 set 最初包含的元素
返回:
最初包含指定元素的枚举 set
抛出:
NullPointerException - 如果 e 为 null

of

public static <E extends Enum<E>> EnumSet<E> of(E e1,
                                                E e2)
创建一个最初包含指定元素的枚举 set。 用 1 到 5 个元素重载此方法,从而初始化一个枚举 set。第 6 次重载使用变量参数功能。此重载可能创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。

参数:
e1 - 此 set 最初要包含的元素
e2 - 此 set 最初要包含的另一个元素
返回:
最初包含指定元素的枚举 set
抛出:
NullPointerException - 如果任意参数为 null

of

public static <E extends Enum<E>> EnumSet<E> of(E e1,
                                                E e2,
                                                E e3)
创建一个最初包含指定元素的枚举 set。 用 1 到 5 个元素重载此方法,从而初始化一个枚举 set。第 6 次重载使用变量参数功能。此重载可能创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。

参数:
e1 - 此 set 最初要包含的元素
e2 - 此 set 最初要包含的另一个元素
e3 - 此 set 最初要包含的另一个元素
返回:
最初包含指定元素的枚举 set
抛出:
NullPointerException - 如果任意参数为 null

of

public static <E extends Enum<E>> EnumSet<E> of(E e1,
                                                E e2,
                                                E e3,
                                                E e4)
创建一个最初包含指定元素的枚举 set。 用 1 到 5 个元素重载此方法,从而初始化一个枚举 set。第 6 次重载使用变量参数功能。此重载可能创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。

参数:
e1 - 此 set 最初要包含的元素
e2 - 此 set 最初要包含的另一个元素
e3 - 此 set 最初要包含的另一个元素
e4 - 此 set 最初要包含的另一个元素
返回:
最初包含指定元素的枚举 set
抛出:
NullPointerException - 如果任意参数为 null

of

public static <E extends Enum<E>> EnumSet<E> of(E e1,
                                                E e2,
                                                E e3,
                                                E e4,
                                                E e5)
创建一个最初包含指定元素的枚举 set。 用 1 到 5 个元素重载此方法,从而初始化一个枚举 set。第 6 次重载使用变量参数功能。此重载可能创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。

参数:
e1 - 此 set 最初要包含的元素
e2 - 此 set 最初要包含的另一个元素
e3 - 此 set 最初要包含的另一个元素
e4 - 此 set 最初要包含的另一个元素
e5 - 此 set 最初要包含的另一个元素
返回:
最初包含指定元素的枚举 set
抛出:
NullPointerException - 如果任意参数为 null

of

public static <E extends Enum<E>> EnumSet<E> of(E first,
                                                E... rest)
创建一个最初包含指定元素的枚举 set。此工厂方法的参数列表使用变量参数功能,该方法可以创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。

参数:
first - 此 set 最初要包含的元素
rest - 此 set 最初要包含的其余元素
返回:
最初包含指定元素的枚举 set
抛出:
NullPointerException - 如果任意参数为 null,或 rest 为 null

range

public static <E extends Enum<E>> EnumSet<E> range(E from,
                                                   E to)
创建一个最初包含由两个指定端点所定义范围内的所有元素的枚举 set。返回的 set 将包含端点本身,这两个端点可能相同,但顺序不能颠倒。

参数:
from - 该范围中的第一个元素
to - 妨碍范围中的最后一个元素
返回:
最初包含由两个指定端点所定义范围内的所有元素的枚举 set
抛出:
NullPointerException - 如果 firstlast 为 null
IllegalArgumentException - 如果 first.compareTo(last) > 0

clone

public EnumSet<E> clone()
返回 set 的副本。

覆盖:
Object 中的 clone
返回:
set 的副本
另请参见:
Cloneable