一、基本概念
枚举是Java1.5引入的新特性,通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但是枚举类不能继承其他类。
二、解决ifelse
随着业务的发展,需求只会越来越复杂,为了考虑各种各样的情况,代码中不可避免的会出现很多的if-else。一旦代码中的if-else过多,就会大大影响其可读性和可维护性。
我们可以使用枚举类解决这个问题;
package day03;
/*服务器托管网*
* @author qx
* @date 2023/10/20
* @des 季节枚举
*/
public enum SeasonEnum {
SPRING, SUMMER, AUTUMN, WINTER
}
package day03;
/**
* @author qx
* @date 2023/10/20
* @des 枚举测试
*/
public class EnumTest {
public static void main(String[] args) {
testSwitch(SeasonEnum.AUTUMN);
}
private static void testSwitch(SeasonEnum season) {
switch (season) {
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
}
}
三、枚举常用方法
方法名 |
说明 |
values() |
返回枚举实例的数组,该数组中的元素保持在枚举中声明的顺序 |
name() |
返回实例名 |
ordinal() |
返回实例声明时的次序 |
getDeclaringClass() |
返回实例所属的枚举类型 |
equals() |
判断枚举实例是否为同一个对象 |
compareTo() |
比较两个对象的ordinal值 |
四、EnumMap
EnumMap作为枚举的专属集合,由于枚举类型实例的数量相对固定并且有限,所以EnumMap使用数组来存放与枚举类型对应的值,毕竟数组是一段连续的内存空间,根据程序局部性原理,效率会很高。
EnumMap需要传递一个类型信息,即Class对象,通过这个参赛EnumMap就可以根据类型信息初始化内部数据结构。
package day03;
/**
* @author qx
* @date 2023/10/20
* @des 季节枚举
*/
public enum SeasonEnum {
SPRING(0, "春天"), SUMMER(1, "夏天"), AUTUMN(2, "秋天"), WINTER(3, "冬天");
private int code;
private String msg;
SeasonEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
public String getMsg() {
return msg;
}
public int getCode() {
return code;
}
}
package day03;
/**
* @author qx
* @date 2023/10/26
* @des
*/
public class StudyJava {
private String name;
private SeasonEnum seasonEnum;
public StudyJava(String name, SeasonEnum seasonEnum) {
this.name = name;
this.seasonEnum = seasonEnum;
}
public StudyJava() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SeasonEnum getSeasonEnum() {
return seasonEnum;
}
public void setSeasonEnum(SeasonEnum seasonEnum) {
this.seasonEnum = seasonEnum;
}
}
package day03;
import java.util.*;
/**
* @author qx
* @date 2023/10/26
* @des HashMap和EnumMap
*/
public class EnumMapDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new StudyJava("春天", SeasonEnum.SPRING));
list.add(new StudyJava("春天1", SeasonEnum.SPRING));
list.add(new StudyJava("夏天", SeasonEnum.SUMMER));
list.add(new StudyJava("秋天", SeasonEnum.AUTUMN));
list.add(new StudyJava("秋天1", SeasonEnum.AUTUMN));
list.add(new StudyJava("冬天", SeasonEnum.WINTER));
Map map = new HashMap();
for (StudyJava studyJava : list) {
SeasonEnum seasonEnum = studyJava.getSeasonEnum();
Integer count = map.get(seasonEnum);
if (count != null) {
map.put(seasonEnum, count + 1);
} else {
map.put(seasonEnum, 1);
}
}
System.out.println(map);
System.out.println("--------------");
// 使用EnumMap
Map enumMap = new EnumMap(SeasonEnum.class);
服务器托管网 for (StudyJava studyJava : list) {
SeasonEnum seasonEnum = studyJava.getSeasonEnum();
Integer count = enumMap.get(seasonEnum);
if (count != null) {
enumMap.put(seasonEnum, count + 1);
} else {
enumMap.put(seasonEnum, 1);
}
}
System.out.println(enumMap);
}
}
输出:
{AUTUMN=2, SUMMER=1, SPRING=2, WINTER=1}
--------------
{SPRING=2, SUMMER=1, AUTUMN=2, WINTER=1}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
Java版剑指offer:用两个栈实现队列 描述 用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。 示例: 输入: [“PSH1”,…