Module java.base
Package java.util

Class EnumSet<E extends Enum<E>>

类型参数:
E - 此集合维护的枚举类型的元素
所有实现的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>

public abstract sealed class EnumSet<E extends Enum<E>> extends AbstractSet<E> implements Cloneable, Serializable
用于枚举类型的专用Set实现。枚举集中的所有元素必须来自单个枚举类型,该类型在创建集合时明确或隐式指定。枚举集在内部表示为位向量。这种表示非常紧凑和高效。如果参数也是枚举集,则此类的空间和时间性能应该足够好,以允许其用作传统基于int的“位标志”的高质量、类型安全的替代品。即使是批量操作(如containsAllretainAll),如果它们的参数也是枚举集,也应该运行得非常快。

iterator方法返回的迭代器以它们的自然顺序(枚举常量声明的顺序)遍历元素。返回的迭代器是弱一致的:它永远不会抛出ConcurrentModificationException,并且在迭代进行时可能或可能不显示对集合进行的任何修改的影响。

不允许空元素。尝试插入空元素将抛出NullPointerException。但是,尝试测试空元素的存在或删除空元素将正常运行。

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

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

实现注意事项:所有基本操作都在常数时间内执行。它们很可能(但不能保证)比它们的HashSet对应操作要快得多。即使是批量操作,如果它们的参数也是枚举集,也会在常数时间内执行。

此类是Java集合框架的成员。

自 JDK 版本:
1.5
参见:
  • Method Details

    • noneOf

      public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType)
      创建一个具有指定元素类型的空枚举集。
      类型参数:
      E - 集合中元素的类
      参数:
      elementType - 此枚举集的元素类型的类对象
      返回:
      指定类型的空枚举集。
      抛出:
      NullPointerException - 如果elementType为null
    • allOf

      public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
      创建一个包含指定元素类型中所有元素的枚举集。
      类型参数:
      E - 集合中元素的类
      参数:
      elementType - 此枚举集的元素类型的类对象
      返回:
      包含指定类型中所有元素的枚举集。
      抛出:
      NullPointerException - 如果elementType为null
    • copyOf

      public static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s)
      创建一个具有与指定枚举集相同元素类型的枚举集,最初包含相同的元素(如果有)。
      类型参数:
      E - 集合中元素的类
      参数:
      s - 用于初始化此枚举集的枚举集
      返回:
      指定枚举集的副本。
      抛出:
      NullPointerException - 如果s为null
    • copyOf

      public static <E extends Enum<E>> EnumSet<E> copyOf(Collection<E> c)
      从指定集合初始化一个枚举集。如果指定的集合是一个EnumSet实例,则此静态工厂方法的行为与copyOf(EnumSet)完全相同。否则,指定的集合必须至少包含一个元素(以确定新枚举集的元素类型)。
      类型参数:
      E - 集合中元素的类
      参数:
      c - 用于初始化此枚举集的集合
      返回:
      从给定集合初始化的枚举集。
      抛出:
      IllegalArgumentException - 如果c不是EnumSet实例并且不包含任何元素
      NullPointerException - 如果c为null
    • complementOf

      public static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s)
      创建一个具有与指定枚举集相同元素类型的枚举集,最初包含该类型中所有未包含在指定集合中的元素。
      类型参数:
      E - 枚举集中元素的类
      参数:
      s - 用于初始化此枚举集的枚举集的补集
      返回:
      此集合中指定集合的补集
      抛出:
      NullPointerException - 如果s为null
    • of

      public static <E extends Enum<E>> EnumSet<E> of(E e)
      创建最初包含指定元素的枚举集。此方法存在多个重载,用于初始化包含一到五个元素的枚举集。还提供了使用可变参数特性的第六个重载。此重载可用于创建最初包含任意数量元素的枚举集,但可能比不使用可变参数的重载运行速度慢。
      类型参数:
      E - 指定元素和集合的类
      参数:
      e - 此集合最初要包含的元素
      返回:
      最初包含指定元素的枚举集
      抛出:
      NullPointerException - 如果e为null
    • of

      public static <E extends Enum<E>> EnumSet<E> of(E e1, E e2)
      创建最初包含指定元素的枚举集。此方法存在多个重载,用于初始化包含一到五个元素的枚举集。还提供了使用可变参数特性的第六个重载。此重载可用于创建最初包含任意数量元素的枚举集,但可能比不使用可变参数的重载运行速度慢。
      类型参数:
      E - 参数元素和集合的类
      参数:
      e1 - 此集合最初要包含的一个元素
      e2 - 此集合最初要包含的另一个元素
      返回:
      最初包含指定元素的枚举集
      抛出:
      NullPointerException - 如果任何参数为null
    • of

      public static <E extends Enum<E>> EnumSet<E> of(E e1, E e2, E e3)
      创建最初包含指定元素的枚举集。此方法存在多个重载,用于初始化包含一到五个元素的枚举集。还提供了使用可变参数特性的第六个重载。此重载可用于创建最初包含任意数量元素的枚举集,但可能比不使用可变参数的重载运行速度慢。
      类型参数:
      E - 参数元素和集合的类
      参数:
      e1 - 初始包含在此集合中的元素
      e2 - 初始包含在此集合中的另一个元素
      e3 - 初始包含在此集合中的另一个元素
      返回:
      最初包含指定元素的枚举集合
      抛出:
      NullPointerException - 如果任何参数为null
    • of

      public static <E extends Enum<E>> EnumSet<E> of(E e1, E e2, E e3, E e4)
      创建一个最初包含指定元素的枚举集合。存在此方法的重载,用于使用一个到五个元素初始化枚举集合。提供了第六个重载,使用了可变参数特性。这个重载可以用于创建一个最初包含任意数量元素的枚举集合,但可能比不使用可变参数的重载运行得更慢。
      类型参数:
      E - 参数元素和集合的类
      参数:
      e1 - 初始包含在此集合中的元素
      e2 - 初始包含在此集合中的另一个元素
      e3 - 初始包含在此集合中的另一个元素
      e4 - 初始包含在此集合中的另一个元素
      返回:
      最初包含指定元素的枚举集合
      抛出:
      NullPointerException - 如果任何参数为null
    • of

      public static <E extends Enum<E>> EnumSet<E> of(E e1, E e2, E e3, E e4, E e5)
      创建一个最初包含指定元素的枚举集合。存在此方法的重载,用于使用一个到五个元素初始化枚举集合。提供了第六个重载,使用了可变参数特性。这个重载可以用于创建一个最初包含任意数量元素的枚举集合,但可能比不使用可变参数的重载运行得更慢。
      类型参数:
      E - 参数元素和集合的类
      参数:
      e1 - 初始包含在此集合中的元素
      e2 - 初始包含在此集合中的另一个元素
      e3 - 初始包含在此集合中的另一个元素
      e4 - 初始包含在此集合中的另一个元素
      e5 - 初始包含在此集合中的另一个元素
      返回:
      最初包含指定元素的枚举集合
      抛出:
      NullPointerException - 如果任何参数为null
    • of

      @SafeVarargs public static <E extends Enum<E>> EnumSet<E> of(E first, E... rest)
      创建一个最初包含指定元素的枚举集合。此工厂使用可变参数特性的参数列表,可以用于创建一个最初包含任意数量元素的枚举集合,但可能比不使用可变参数的重载运行得更慢。
      类型参数:
      E - 参数元素和集合的类
      参数:
      first - 初始包含在集合中的元素
      rest - 初始包含在集合中的其余元素
      返回:
      最初包含指定元素的枚举集合
      抛出:
      NullPointerException - 如果指定的元素中有任何一个为null,或者rest为null
    • range

      public static <E extends Enum<E>> EnumSet<E> range(E from, E to)
      创建一个最初包含由两个指定端点定义的范围内所有元素的枚举集合。返回的集合将包含端点本身,它们可以相同但不能顺序颠倒。
      类型参数:
      E - 参数元素和集合的类
      参数:
      from - 范围中的第一个元素
      to - 范围中的最后一个元素
      返回:
      最初包含由两个指定端点定义的范围内所有元素的枚举集合
      抛出:
      NullPointerException - 如果fromto为null
      IllegalArgumentException - 如果from.compareTo(to) > 0
    • clone

      public EnumSet<E> clone()
      返回此集合的副本。
      覆盖:
      clone 在类 Object
      返回:
      此集合的副本
      参见: