EnumSet是一个枚举类型元素集的高效实现。由于枚举类型只有有限个实例,所以EnumSet内部用位序列实现。如果对应的值在集中,则相应的位被置为1。
EnumSet类没有公共的构造器。可以使用静态工厂方法构造这个集:
enum Weekday{MonDay,TuesDay,WenesDay,ThursDay,FriDay,SaturDay,SunDay};
EnumSet<Weekday> enumSet=EnumSet.allOf(Weekday.class);// 创建一个包含指定元素类型的所有元素的枚举 set
EnumSet<Weekday> never=EnumSet.noneOf(Weekday.class);// 创建一个具有指定元素类型的空枚举 set
EnumSet<Weekday> workday=EnumSet.range(Weekday.MonDay, Weekday.FriDay);//创建一个最初包含由两个指定端点所定义范围内的所有元素的枚举 set
EnumSet<Weekday> mwf=EnumSet.of(Weekday.MonDay, Weekday.FriDay,Weekday.SunDay,Weekday.SaturDay);//创建一个最初包含指定元素的枚举 set
可以使用Set接口的常用方法来修改EnumSet。
import java.util.EnumSet;
public class Test {
public Test() {
// TODO Auto-generated constructor stub
}
enum Weekday{MonDay,TuesDay,WenesDay,ThursDay,FriDay,SaturDay,SunDay};
public static void main(String[] args) {
// TODO Auto-generated method stub
EnumSet<Weekday> enumSet=EnumSet.allOf(Weekday.class);// 创建一个包含指定元素类型的所有元素的枚举 set
enumSet.remove(Weekday.MonDay);//创建的枚举元素,可以被删除
System.out.println(enumSet);
EnumSet<Weekday> never=EnumSet.noneOf(Weekday.class);// 创建一个具有指定元素类型的空枚举 set
never.add(Weekday.FriDay);
never.add(Weekday.SunDay);
never.add(Weekday.MonDay);//会自动排序
System.out.println(never);
EnumSet<Weekday> workday=EnumSet.range(Weekday.MonDay, Weekday.FriDay);//创建一个最初包含由两个指定端点所定义范围内的所有元素的枚举 set
System.out.println(workday);//输出MonDay~FriDay之间的枚举变量
EnumSet<Weekday> mwf=EnumSet.of(Weekday.MonDay, Weekday.FriDay,Weekday.SunDay,Weekday.SaturDay);//创建一个最初包含指定元素的枚举 set
System.out.println(mwf);
mwf.add(Weekday.WenesDay);//添加元素
System.out.println(mwf);
}
}
输出结果:
[TuesDay, WenesDay, ThursDay, FriDay, SaturDay, SunDay]
[MonDay, FriDay, SunDay]
[MonDay, TuesDay, WenesDay, ThursDay, FriDay]
[MonDay, FriDay, SaturDay, SunDay]
[MonDay, WenesDay, FriDay, SaturDay, SunDay]
EnumMap是一个键类型为枚举类型的映射表。它可以直接且高效地用一个值数组实现。在使用时,需要在构造器中指定键类型:
EnumMap