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;    //这里的枚举选项名称都为“常量”
          }
测试

// 创建枚举类
java中的枚举详解

//测试类
java中的枚举详解

//测试结果
java中的枚举详解

保存枚举的方式
   使用集合保存枚举选项,可以使用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集合保存
java中的枚举详解

//使用hashMap保存枚举
java中的枚举详解

// 使用enumMap保存枚举
java中的枚举详解

//测试结果
java中的枚举详解