• java基础篇---枚举详解


    在JDK1.5之前,JAVA可以有两种方式定义新类型:类和接口,对于大部分面向对象编程,有这两种似乎就足够了,但是在一些特殊情况就不合适。例如:想要定义一个Color类,它只能有Red,Green,Blue三种,其他值则是错误,在JDK1.5之后便引入枚举类型。

    枚举其实就是一种类型,跟int, char 这种差不多,就是定义变量时限制输入的,你只能够赋enum里面规定的值。

    public enum Color{
        RED,GREEN,BLUE ;    // 定义三个枚举的类型
    };

    枚举中有三个取值,以后再取的时候,只能从这三个内容取

    public class GetEnumContent{
        public static void main(String args[]){
            Color c = Color.BLUE ;        // 取出蓝色
            System.out.println(c) ;
        }
    };

    可以直接使用在Switch语句上

    public class SwitchPrintEnum{
        public static void main(String args[]){
            for(Color c:Color.values()){    // 输出枚举中的全部内容
                print(c) ;
            }
        }
        public static void print(Color color){
            switch(color){
                case RED:{
                    System.out.println("红颜色") ;
                    break ;
                }
                case GREEN:{
                    System.out.println("绿颜色") ;
                    break ;
                }
                case BLUE:{
                    System.out.println("蓝颜色") ;
                    break ;
                }
                default:{
                    System.out.println("未知颜色") ;
                    break ;
                }
            }
        }
    };

    使用enum关键字可以定义一个枚举,也可以定义一个Eunm类

    枚举类的操作方法:

    在枚举已经实现Comparable接口,所以在枚举中的内容可以排序。

    案列一

    import java.util.Iterator;
    import java.util.Set ;
    import java.util.TreeSet ;
    enum Color{
        RED,GREEN,BLUE ;
    }
    public class ComparableEnum{
        public static void main(String args[]){
            Set<Color> t = new TreeSet<Color>() ;    // 设置类型
            t.add(Color.GREEN) ;    // 加入绿色
            t.add(Color.RED) ;        // 加入红色
            t.add(Color.BLUE) ;        // 加入蓝色
            Iterator<Color> iter = t.iterator() ;
            while(iter.hasNext()){
                System.out.print(iter.next() + "") ;
            }
        }
    };

    案列二 

    使用EnumMap

    import java.util.EnumMap ;
    import java.util.Map ;
    enum Color{
        RED , GREEN , BLUE ;
    }
    public class EnumMapDemo{
        public static void main(String args[]){
            Map<Color,String> desc = null ;        // 定义Map对象,同时指定类型
            desc = new EnumMap<Color,String>(Color.class) ;    // 实例化EnumMap对象
            desc.put(Color.RED,"红色") ;
            desc.put(Color.GREEN,"绿色") ;
            desc.put(Color.BLUE,"蓝色") ;
            System.out.println("====== 输出全部的内容 ======") ;
            for(Color c:Color.values()){
                System.out.println(c.name() + " --> " + desc.get(c)) ;
            }
            System.out.println("====== 输出全部的键值 ======") ;
            for(Color c:desc.keySet()){
                System.out.print(c.name() + "") ;
            }
            System.out.println() ;
            System.out.println("====== 输出全部的内容 ======") ;
            for(String s:desc.values()){
                System.out.print(s + "") ;
            }
        }
    };

    案列三

    使用 EnumSet

    import java.util.EnumSet ;
    enum Color{
        RED , GREEN , BLUE ;
    }
    public class EnumSetDemo{
        public static void main(String args[]){
            EnumSet<Color> esOld = null ;            // 声明一个EnumSet对象
            EnumSet<Color> esNew = null ;
            System.out.println("======== EnumSet.copyOf(Color.class) =====") ;
            esOld = EnumSet.noneOf(Color.class) ;    // 将枚举的全部类型设置到EnumSet对象之中
            esOld.add(Color.RED) ;    // 增加内容
            esOld.add(Color.GREEN) ;    // 增加内容
            esNew = EnumSet.copyOf(esOld) ;    // 从已有的集合拷贝过来
            print(esNew) ;
        }
        public static void print(EnumSet<Color> temp){    // 专门的输出操作
            for(Color c:temp){        //  循环输出EnumSet中的内容
                System.out.print(c + "") ;
            }
            System.out.println() ;
        }
    };
  • 相关阅读:
    【1093 Ghajini 线段树】
    【ECJTU_ACM 11级队员2012年暑假训练赛(8) K A short problem】
    【ECJTU_ACM 11级队员2012年暑假训练赛(8) C Asteroids】
    【ECJTU_ACM 11级队员2012年暑假训练赛(7) E Little Elephant and Sorting】
    【ECJTU_ACM 11级队员2012年暑假训练赛(8) F A Mame】
    【hdu 1022 (简单栈题目),,狂敲代码】
    【ECJTU_ACM 11级队员2012年暑假训练赛(8) B Modular Inverse】
    【hdu 1069 Monkey and Banana(动态规划,被坑死。一遍AC)】
    【ECJTU_ACM 11级队员2012年暑假训练赛(7) D Little Elephant and Rozdil】
    【ECJTU_ACM 11级队员2012年暑假训练赛(8) H Petya and Strings】
  • 原文地址:https://www.cnblogs.com/oumyye/p/4232532.html
Copyright © 2020-2023  润新知