java-枚举
枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等
声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举声明的语法如下:
enum-modifiers enum enumname:enum-base {
    enum-body,
}
/* 格式:enum-modifiers enum enumname:enum-base { body } enum-modifiers:枚举的修饰符:public private internal; enumname:枚举的名字 enum-base 枚举的基础类型 enum-body 枚举的成员 特性: 任意两个枚举成员不能具有相同的名称 它的常数值必须在该枚举的基础类型的范围之内 多个枚举成员之间使用逗号分隔 注意:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int */
可以通过枚举类型名直接引用常量,
enum类
Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。
| 方法名称 | 描述 | 
|---|---|
| values() | 以数组形式返回枚举类型的所有成员 | 
| valueOf() | 将普通字符串转换为枚举实例 | 
| compareTo() | 比较两个枚举成员在定义时的顺序 | 
| ordinal() | 获取枚举成员的索引位置 | 
/* 通过调用枚举类型实例的 values( ) 方法可以将枚举的所有成员以数组形式返回, 也可以通过该方法获取枚举类型的成员。 */ public class DemoTest1 { public enum Demoonwo { male,female,middle,nothing; } public static void main(String[] args) { System.out.println(Demoonwo.values());//因为返回的数组,所以打印出来的数组的地址 System.out.println("############################"); for (int i = 0; i < Demoonwo.values().length ;i++){ System.out.println(Demoonwo.values()[i]); } System.out.println("############################"); // 获取一名成员: 枚举.valueOf System.out.println(Demoonwo.valueOf("male")); System.out.println("##########################"); // 获取成员的索引位置 要先获取到枚举成员才能得到索引位置 System.out.println(Demoonwo.valueOf("male").ordinal()); System.out.println(Demoonwo.valueOf("nothing").ordinal()); // } } /* [Lquan.DemoTest1$Demoonwo;@4554617c male female middle nothing
枚举类可以添加方法和内置值:
enum WeekDay{ // 如果在枚举里面要设置值的话,每个枚举里面的值抽象到枚举里面的私有变量 //并且创建构造函数去初始化,同时给与get方法 one("星期一",1),two("星期二",2),three("星期三",3), four("星期四",4),five("星期五",5); private final String day; protected final int dd; private WeekDay(String day,int dd) { this.day = day; this.dd = dd; } public String getDay() { return day; } public int getDd() { return dd; } @Override // 重载打印的格式,不在是默认的格式 public String toString() { return "WeekDay{" + "day='" + day + '\'' + ", dd=" + dd + '}'; } } public class DemoValueOf { public static void main(String[] args) { for(int i = 0; i < WeekDay.values().length -3;i++){ System.out.println(WeekDay.values()[i]+":" +WeekDay.values()[i].getDay() +"---"+WeekDay.values()[i].getDd()); } System.out.println("#####################"); for (WeekDay wd: WeekDay.values()) { System.out.println(wd + "--"+wd.getDd()+"---"+wd.getDay()); } // 返回的是数组,所以是地址 System.out.println(WeekDay.values()); //因为toString已经重写了,所以按格式打印 for (WeekDay wd: WeekDay.values()) { System.out.println(wd); } } } /* WeekDay{day='星期一', dd=1}:星期一---1 WeekDay{day='星期二', dd=2}:星期二---2 ##################### WeekDay{day='星期一', dd=1}--1---星期一 WeekDay{day='星期二', dd=2}--2---星期二 WeekDay{day='星期三', dd=3}--3---星期三 WeekDay{day='星期四', dd=4}--4---星期四 WeekDay{day='星期五', dd=5}--5---星期五 [Lquan.WeekDay;@1540e19d WeekDay{day='星期一', dd=1} WeekDay{day='星期二', dd=2} WeekDay{day='星期三', dd=3} WeekDay{day='星期四', dd=4} WeekDay{day='星期五', dd=5} */
EnumMap 类
EnumSet 类
EnumSet 是枚举类型的高性能 Set 实现,它要求放入它的枚举常量必须属于同一枚举类型。
| 方法名称 | 描述 | 
|---|---|
| allOf(Class<E> element type) | 创建一个包含指定枚举类型中所有枚举成员的 EnumSet 对象 | 
| complementOf(EnumSet<E> s) | 创建一个与指定 EnumSet 对象 s 相同的枚举类型 EnumSet 对象, 并包含所有 s 中未包含的枚举成员  | 
| copyOf(EnumSet<E> s) | 创建一个与指定 EnumSet 对象 s 相同的枚举类型 EnumSet 对象, 并与 s 包含相同的枚举成员  | 
| noneOf(<Class<E> elementType) | 创建指定枚举类型的空 EnumSet 对象 | 
| of(E first,e...rest) | 创建包含指定枚举成员的 EnumSet 对象 | 
| range(E from ,E to) | 创建一个 EnumSet 对象,该对象包含了 from 到 to 之间的所有枚 举成员  | 
enum Demo { zore,one,two,three,four,five; } public class EnumSetDemo { public static void main(String[] args) { // 指定枚举类型,创建所有枚举成员的集合 EnumSet<Demo> ende = EnumSet.allOf(Demo.class); System.out.println(ende);//[zore, one, two, three, four, five] // 指定枚举类型,创建空集合 EnumSet<Demo> endtwo = EnumSet.noneOf(Demo.class); System.out.println(endtwo);//[] // 创建包含指定枚举成员的 EnumSet 对象 EnumSet<Demo> endthree = EnumSet.of(Demo.five,Demo.one); System.out.println(endthree);//[one, five] // 创建一个 EnumSet 对象,该对象包含了 from 到 to 之间的所有枚举成员 EnumSet<Demo> endfout = EnumSet.range(Demo.one,Demo.four); System.out.println(endfout);//[one, two, three, four] } }
                    
                
                
            
        
浙公网安备 33010602011771号