枚举入门
枚举入门
枚举类型的定义
通过关键字 enum 定义枚举类型数据,数据值一般采用大写。定义位置可以放在类中,类的外部,或者另外的文件中定义。
public class EnumLearn {
public enum Animal {
CAT, MOUSE, TIGER, DOG, BIRD;
}
Animal cat = Animal.CAT;
}
支持SWITCH操作
public class EnumLearn {
public enum Animal {
CAT, MOUSE, TIGER, DOG, BIRD;
}
Animal animal = Animal.DOG;
switch (animal){
case CAT:
System.out.println(animal);
break;
case MOUSE:
System.out.println(animal);
break;
case TIGER:
System.out.println(animal);
break;
case DOG:
System.out.println(animal);
break;
case BIRD:
System.out.println(animal);
break;
}
}
自定义枚举类
一个枚举类,里面只能存放一个字段,显得太少了。通过自定义枚举类,就能实现多个字段的枚举。
可以通过定制 Enum 类型来定义自己的枚举类。需要注意的是枚举类型的构造函数是私有的 private,所以不能通过 New 来创建枚举类型,正因如此才保证了枚举数据类型的安全,不会被更改。
public class EnumLearn {
public enum Color{
RED("红色",1),YELLOW("黄色",2),GREEN("绿色",3);
private String name;
private int index;
Color(String name, int index) {
this.name = name;
this.index = index;
}
public String getName() {
return name;
}
public int getIndex() {
return index;
}
}
public static void main(String[] args) {
//通过第二个字段index来输出
Color green = Color.GREEN;
if(green.index==3){
System.out.println(green);
}else {
System.out.println(green.index);
}
//通过SWITCH
Color cor = Color.YELLOW;
switch (cor){
case RED:
System.out.println(cor);
break;
case YELLOW:
System.out.println(cor);
break;
case GREEN:
System.out.println(cor);
break;
}
}
}
//输出结果:
//绿色
//黄色
相关枚举类
处理 enum 枚举类型,还有集合相关的枚举类型数据,如:EnumMap、EnumSet
EnumMap 枚举型映射/字典
相当于 key 是枚举类型的映射。如:
EnumMap<Color,String> enumMap = new EnumMap<>(Color.class);
enumMap.put(Color.RED,"value:red");
//{RED=value:red, YELLOW=value:yellow, GREEN=value:green}
enumMap.put(Color.YELLOW,"value:yellow");
//{RED=value:red, YELLOW=value:yellow, GREEN=value:green}
enumMap.put(Color.GREEN,"value:green");
//{RED=value:red, YELLOW=value:yellow, GREEN=value:green}
for(int i = 0;i < enumMap.size();i++){
System.out.println(enumMap);
}
EnumSet 枚举集合
EnumSet 是个抽象类,不能实例化,查看源码发现有提供静态实例化 JumboEnumSet 或 RegularEnumSet 对象的方法。这两个对象继承自 EnumSet,区别在于 EnumSet 大小,大于 64 时创建的是 JumboEnumSet 对象,小于 64 时创建的是 RegularEnumSet 对象。源码如下:
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
Enum<?>[] universe = getUniverse(elementType);
if (universe == null)
throw new ClassCastException(elementType + " not an enum");
if (universe.length <= 64)
return new RegularEnumSet<>(elementType, universe);
else
return new JumboEnumSet<>(elementType, universe);
}
使用枚举集合:
EnumSet<Color> corList = EnumSet.noneOf(Color.class);
corList.add(Color.RED);
corList.add(Color.YELLOW);
corList.add(Color.GREEN);
for(Color color : corList){
System.out.println(color.getIndex()+":"+color.getName());
}

浙公网安备 33010602011771号