数组里面存储枚举类型没有多大的意义吧,因为数组里面的类型不固定,而且数组大小声明之后不能变
但是Java提供了一个枚举的集合EnumSet专门为枚举设计的集合,[color=Red]里面存储的必须是指定的枚举类型的值,这个类型在创建枚举机会的时候显示或者隐士的指定[/color]
[color=Red]并且EnumSet是有序的,EnumSet以枚举值在Enum类里面定义的顺序来决定集合元素的顺序[/color]
比如下面的程序:[code=java]package cn.itcast.heima;
import java.util.*;
enum Season
{
SPRING,SUMMER,FALL,WINTER
}
public class EnumSetDemo
{
public static void main(String[] args)
{
//创建一个EnumSet集合,集合元素就是Season枚举类的全部枚举值
EnumSet es1 = EnumSet.allOf(Season.class);
//输出[SPRING,SUMMER,FALL,WINTER]
System.out.println(es1);
//创建一个EnumSet空集合,指定其集合元素是Season类的枚举值。
EnumSet es2 = EnumSet.noneOf(Season.class);
//输出[]
System.out.println(es2);
//手动添加两个元素
es2.add(Season.WINTER);
es2.add(Season.SPRING);
//输出[SPRING,WINTER]
System.out.println(es2);
//以指定枚举值创建EnumSet集合
EnumSet es3 = EnumSet.of(Season.SUMMER , Season.WINTER);
//输出[SUMMER,WINTER]
System.out.println(es3);
EnumSet es4 = EnumSet.range(Season.SUMMER , Season.WINTER);
//输出[SUMMER,FALL,WINTER]
System.out.println(es4);
//新创建的EnumSet集合的元素和es4集合的元素有相同类型,
//es5的集合元素 + es4集合元素 = Season枚举类的全部枚举值
EnumSet es5 = EnumSet.complementOf(es4);
//输出[SPRING]
System.out.println(es5);
}
}[/code]下面程序用来测试上面定义的枚举类[code=java]package cn.itcast.heima
import java.util.*;
public class TestEnumSet
{
public static void main(String[] args)
{
Collection c = new HashSet();
c.clear();
c.add(Season.FALL);
c.add(Season.SPRING);
//复制Collection集合中所有元素来创建EnumSet集合
EnumSet enumSet = EnumSet.copyOf(c);
//输出[SPRING,FALL]
System.out.println(enumSet);
c.add("中关村黑马程序员训练营");
c.add("第三期于8月12日开班");
//下面代码出现异常:因为c集合里的元素不是全部都为枚举值
enumSet = EnumSet.copyOf(c);
}
} [/code]当我们再复制枚举集合的时候要保证目标机会中的元素必须是同一个枚举类型的枚举值,否则将会抛出ClassCastException异常 |