EnumSet

EnumSet是专门为枚举类涉及的集合类

  • EnumSet的所有元素都必须是指定枚举类型的枚举值

  • EnumSet的集合元素是有序的()由枚举类的定义顺序决定存储顺序

  • EnumSet在内部采用位向量形式存储–存储紧凑、高效,占用内存小、运行效率高,适合批量操作

  • EnumSet不允许添加重复元素,如果添加重复值,则会将上一次的值覆盖

  • 不允许添加null,如果添加null,则会报空指针异常NullPointerException

@Test
    public void EnumSetTest(){
        EnumSet enumSet =EnumSet.allOf(TestEnumSet.class);
//        enumSet.add(TestEnumSet.class);//非法,这里只能添加一个元素,如果将整个枚举类放入,则存放的是地址值
        enumSet.add(TestEnumSet.Spring);//无法添加重复值
        for (Object o : enumSet) {
            System.out.println("enumSet:"+o);
        }
//        enumSet.add(null);//NullPointerException
        //创建一个空的集合
        EnumSet enumSet1=EnumSet.noneOf(TestEnumSet.class);
        for (Object o : enumSet1) {
            System.out.println("enumSet1:"+o);
        }
        //以指定枚举值创建集合
        EnumSet enumSet2=EnumSet.of(TestEnumSet.Spring,TestEnumSet.Winter,TestEnumSet.Summer);
        for (Object o : enumSet2) {
            System.out.println("enumSet2:"+o);
        }
        //创建一个集合enumSet3,不包含enumSet2集合元素的其他元素集合
        EnumSet enumSet3=EnumSet.complementOf(enumSet2);
        for (Object o : enumSet3) {
            System.out.println("enumSet3:" + o);
        }
        //复制Collection集合中的元素到EnumSet中---必须保证 Collection中添加的值都必须是枚举值
        Collection c=new HashSet();
        c.add(TestEnumSet.Spring);
        c.add(TestEnumSet.Winter);
        c.add(TestEnumSet.Summer);
//        c.add("123");//java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
        EnumSet enumSet4=EnumSet.copyOf(c);
        for (Object o : enumSet4) {
            System.out.println("enumSet4:" + o);
        }
        //复制枚举集合A到枚举集合B
        EnumSet enumSet5=EnumSet.copyOf(enumSet4);
        for (Object o : enumSet5) {
            System.out.println("enumSet5:" + o);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl·杰尼龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值