java技术--枚举类Enum

1.枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型
2.它既是一种类(class)却又比普通类多了些特殊的约束,这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性
3.枚举类的出现就是为了解决定义常量的繁琐
4.没有枚举类型时定义常量常见的方式:

public class DayDemo {
    public static final int MONDAY =1;
    public static final int TUESDAY=2;
    public static final int WEDNESDAY=3;
    public static final int THURSDAY=4;
    public static final int FRIDAY=5;
    public static final int SATURDAY=6;
    public static final int SUNDAY=7;
}1)上述的常量定义常量的方式称为int枚举模式
(2)类型安全和使用方便性上并没有多少好处

5.利用枚举类型来重新定义上述的常量:

public class EnumDemo {
    public static void main(String[] args){
        //直接引用
        Day day =Day.MONDAY;
    }
}
//定义枚举类型
enum Day {
    MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY, SUNDAY
}1)定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型
 (2)枚举类型可以像类(class)类型一样,定义为一个单独的文件,也可以定义在其他类内部
 (3)枚举类型Day中分别定义了从周一到周日的值,值一般是大写的字母,多个值之间以逗号分隔

6.枚举实现原理:

  (1)使用关键字enum创建枚举类型并编译后,编译器会为我们生成一个相关的类
  (2)这个类继承了Java API中的java.lang.Enum类
  (3)枚举类的高阶用法:
  public enum Color {
	 MONDAY("1","星期一"),THUSDAY("2","星期二");//这个后面必须有分号
	    private String code;
	    private String name;
	  //省略get/set方法
	    private Color(String code,String name) {//创建私有的构造方法
	        this.code = code;
	        this.name = name;
	    }
}
 public static void main(String[] args) {
            System.out.println(Color.MONDAY.getCode());//1
            System.out.println(Color.MONDAY.getName());//星期一
            System.out.println(Color.THUSDAY.getCode());//2
            System.out.println(Color.THUSDAY.getName());//星期二
    }

7.EnumMap基本用法:

 (1)场景应用: 有一堆size大小相同而颜色不同的数据,需要统计出每种颜色的数量是多少以便将数据录入仓库
  //定义如下枚举用于表示颜色Color:
   enum Color {
    GREEN,RED,BLUE,YELLOW
}
(2)使用HashMap与EnumMap对比
public class EnumMapDemo {
    public static void main(String[] args){
        List<Clothes> list = new ArrayList<>();
        list.add(new Clothes("C001",Color.BLUE));
        list.add(new Clothes("C002",Color.YELLOW));
        list.add(new Clothes("C003",Color.RED));
        list.add(new Clothes("C004",Color.GREEN));
        list.add(new Clothes("C005",Color.BLUE));
        list.add(new Clothes("C006",Color.BLUE));
        list.add(new Clothes("C007",Color.RED));
        list.add(new Clothes("C008",Color.YELLOW));
        list.add(new Clothes("C009",Color.YELLOW));
        list.add(new Clothes("C010",Color.GREEN));
        //方案1:使用HashMap
        Map<String,Integer> map = new HashMap<>();
        for (Clothes clothes:list){
           String colorName=clothes.getColor().name();
           Integer count = map.get(colorName);
            if(count!=null){
                map.put(colorName,count+1);
            }else {
                map.put(colorName,1);
            }
        }
        System.out.println(map.toString());
        //方案2:使用EnumMap
        Map<Color,Integer> enumMap=new EnumMap<>(Color.class);
        for (Clothes clothes:list){
            Color color=clothes.getColor();
            Integer count = enumMap.get(color);
            if(count!=null){
                enumMap.put(color,count+1);
            }else {
                enumMap.put(color,1);
            }
        }
        System.out.println(enumMap.toString());
    }
    /**
     输出结果:
     {RED=2, BLUE=3, YELLOW=3, GREEN=2}
     ---------------
     {GREEN=2, RED=2, BLUE=3, YELLOW=3}
     */
}
    <1>EnumMap作为枚举的专属的集合
    <2>EnumMap要求其Key必须为Enum类型
    <3>使用EnumMap会更加高效,它只能接收同一枚举类型的实例作为键值且不能为null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值