EnumSet用法

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.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。

示例

import java.util.EnumSet;

public class EnumTest {

	public static void main(String[] args) {
	EnumSet<AlarmPoints> points = EnumSet.noneOf(AlarmPoints.class);
	points.add(AlarmPoints.BATHROOM);
	System.out.println(points);
	points.addAll(EnumSet.of(AlarmPoints.START1,AlarmPoints.START2,AlarmPoints.KITCHEN));
	System.out.println(points);
	points = EnumSet.allOf(AlarmPoints.class);
	System.out.println(points);
	points.removeAll(EnumSet.of(AlarmPoints.START1,AlarmPoints.START2,AlarmPoints.KITCHEN));
	System.out.println(points);
	points.removeAll(EnumSet.range(AlarmPoints.OFFICE1, AlarmPoints.OFFICE4));
	System.out.println(points);
	points = EnumSet.complementOf(points);
	System.out.println(points);
	}
}

enum AlarmPoints{
	START1,START2,LOBBY,OFFICE1,OFFICE2,OFFICE3,OFFICE4,BATHROOM,UTILITY,KITCHEN
}


输出:

[BATHROOM]
[START1, START2, BATHROOM, KITCHEN]
[START1, START2, LOBBY, OFFICE1, OFFICE2, OFFICE3, OFFICE4, BATHROOM, UTILITY, KITCHEN]
[LOBBY, OFFICE1, OFFICE2, OFFICE3, OFFICE4, BATHROOM, UTILITY]
[LOBBY, BATHROOM, UTILITY]
[START1, START2, OFFICE1, OFFICE2, OFFICE3, OFFICE4, KITCHEN]



你可能感兴趣的:(EnumSet用法)