java中的枚举详解

@rxq

枚举
1、枚举是java中异种特殊的集合,可以保存一系列的数据选项,枚举类是可以直接用  '枚举类名.枚举选项'  使用的  
2、所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类
3、枚举的构造方法是用private修饰的,是私有构造方法,防止被外部调用
4、父类Enum中的定义的方法只有toString方法没有使用final修饰
5、枚举的应用场景
        * 可以保存一周的星期
        * 可以保存颜色的数据
        * 保存性别 
        * 。。。。
6、枚举的定义格式:
         public enum 枚举类名{
                  枚举1,枚举2,枚举3 ....;
           }
         例如:
         public enum Gender{  //性别选项
                   MAN,WOMAN;    //这里的枚举选项名称都为“常量”
          }
测试

// 创建枚举类

public enum Week{
    /**
     * 定义一周的星期的枚举
     */
    MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRTDAY,SATURDAY,SUNDAY;

}

//测试类

 //定义一个对象变量week,为其赋值
        Week week = Week.MONDAY;

        //使用选择语句进行测试
        switch(week){
            case MONDAY:
                System.out.println("周一啦");break;
            case TUESDAY:
                System.out.println("周二啦");break;
            case WEDNESDAY:
                System.out.println("周三啦");break;
            case THURSDAY:
                System.out.println("周四啦");break;
            case FRTDAY:
                System.out.println("周五啦");break;
            case SATURDAY:
                System.out.println("周六啦");break;
            case SUNDAY:
                System.out.println("周日啦");break;
            default:
                System.out.println("不是一个正确的星期");break;
        }

//测试结果
在这里插入图片描述

保存枚举的方式
   使用集合保存枚举选项,可以使用HashMap、EnumMap、EnumSet
     * HashMap就与平时使用方式一样
     * EnumMap与HashMap不同,
     * 它需要传递一个类型信息,即Class对象,通过这个参数EnumMap就可以根据类型信息初始化其内部数据结构Map<Week,Integer> enumMap=new EnumMap<>(Week.class);
     * EnumMap内部有两个数组,长度相同,一个表示所有可能的键(枚举值),一个表示对应的值,不允许keynull,但允许value为null,键都有一个对应的索引,根据索引直接访问和操作其键数组和值数组
     * 
     * EnumSet 中所有元素都必须是枚举类型
     * 与其他Set接口的实现类HashSet/TreeSet(内部都是用对应的HashMap/TreeMap实现的)不同的是,EnumSet在内部实现是位向量
     * 位向量是一种极为高效的位运算操作,由于直接存储和操作都是bit,因此EnumSet空间和时间性能都十分可观
     * EnumSet不允许使用 null 元素,EnumSet不是线程安全的
     * 创建EnumSet并不能使用new关键字,因为它是个抽象类,而应该使用其提供的静态工厂方法
测试

// 使用list集合保存

        List<Weeks> list = new ArrayList<>();
        list.add(new Weeks("C001",Week.MONDAY));
        list.add(new Weeks("C002",Week.TUESDAY));
        list.add(new Weeks("C003",Week.WEDNESDAY));
        list.add(new Weeks("C004",Week.THURSDAY));
        list.add(new Weeks("C005",Week.FRTDAY));
        list.add(new Weeks("C006",Week.SATURDAY));
        list.add(new Weeks("C007",Week.SUNDAY));
        list.add(new Weeks("C008",Week.SATURDAY));
        list.add(new Weeks("C009",Week.TUESDAY));
        list.add(new Weeks("C0010",Week.THURSDAY));
        list.add(new Weeks("C0011",Week.SUNDAY));

//使用hashMap保存枚举

       Map<String,Integer> map = new HashMap<>();
        for (Weeks weeks:list){
            String weekName=weeks.getWeek().name();
            Integer count = map.get(weekName);
            if(count!=null){
                map.put(weekName,count+1);
            }else {
                map.put(weekName,1);
            }
        }
        System.out.println(map.toString());

// 使用enumMap保存枚举

        Map<Week,Integer> enumMap=new EnumMap<>(Week.class);

        for (Weeks clothes:list){
            Week week2=clothes.getWeek();
            Integer count = enumMap.get(week2);
            if(count!=null){
                enumMap.put(week2,count+1);
            }else {
                enumMap.put(week2,1);
            }
        }
        System.out.println(enumMap.toString());

//测试结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值