java中EnumSet类

来源:互联网 发布:淘宝权重是什么意思 编辑:程序博客网 时间:2024/05/21 08:46

一、类结构:

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,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。

由 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、public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) 
创建一个具有指定元素类型的空枚举 set。
参数:elementType - 此枚举 set 的元素类型的 class 对象
抛出:NullPointerException - 如果 elementType 为 null
2、public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)   
创建一个包含指定元素类型的所有元素的枚举 set。 
参数:elementType - 此枚举 set 的元素类型的 class 对象 
抛出: NullPointerException - 如果 elementType 为 null
3、public static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s) 
创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含相同的元素(如果有的话)。 参数:s - 用于初始化此枚举 set 的枚举 set 
抛出: NullPointerException - 如果 s 为 null
4、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
5、public static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s)  
创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含指定 set 中所不 包含的此类型的所有元素。 
参数:s - 用其补码初始化此枚举 set 的枚举 set 
抛出: NullPointerException - 如果 s 为 null
6、public static <E extends Enum<E>> EnumSet<E> of(E e)
创建一个最初包含指定元素的枚举 set。 用 1 到 5 个元素重载此方法,从而初始化一个枚举 set。第 6 次重载使用变量参数功能。此重载可能创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。 
参数:e - 此 set 最初包含的元素 
返回:最初包含指定元素的枚举 set 
抛出: NullPointerException - 如果 e 为 null
7、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
8、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
9、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
10、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
11、public static <E extends Enum<E>> EnumSet<E> of(E first,  E... rest)
创建一个最初包含指定元素的枚举 set。此工厂方法的参数列表使用变量参数功能,该方法可以创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。 
参数:first - 此 set 最初要包含的元素
      rest - 此 set 最初要包含的其余元素 
返回:最初包含指定元素的枚举 set 
抛出: NullPointerException - 如果任意参数为 null,或 rest 为 null
12、public static <E extends Enum<E>> EnumSet<E> range(E from, E to)
创建一个最初包含由两个指定端点所定义范围内的所有元素的枚举 set。返回的 set 将包含端点本身,这两个端点可能相同,但顺序不能颠倒。 
参数:from - 该范围中的第一个元素
      to - 妨碍范围中的最后一个元素 
返回:最初包含由两个指定端点所定义范围内的所有元素的枚举 set 
抛出: NullPointerException - 如果 first 或 last 为 null 
       IllegalArgumentException - 如果 first.compareTo(last) > 0
13、public EnumSet<E> clone()    返回 set 的副本。 
覆盖:类 Object 中的 clone
返回:set 的副本
另请参见:Cloneable


0 0
原创粉丝点击