关键词搜索

源码搜索 ×
×

(Java)类集对枚举的支持 - EnumMap、EnumSet

发布2020-02-19浏览620次

详情内容

一、EnumMap

EnumMap 是 Map 接口的子类,所以本身还是以 Map 的形式进行操作的,即
key->value。如果要使用 EnumMap,则首先要创建 EnumMap 的对象,在创建此对象时必须指定要操作的枚举类型,构造方法:

public EnumMap(Class<K> keyType)
    import java.util.EnumMap;
    import java.util.Map;
    
    enum Color {
        RED, GREEN, BLUE;//定义枚举的3个类型
    }
    
    public class Root{
        public static void main(String[] args) {
            Map<Color,String > desc = null;
            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()){//取得全部的 key
                System.out.print(c.name() + "、");
            }
            System.out.println();
            System.out.println("----- 输出全部的内容 -----");
            for (String s:desc.values()){//取得全部的 value
                System.out.print(s + "、");
            }
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    二、EnumSet

    EnumSet 是 Set 接口的子类,所以里面的内容是无法重复的。使用 EnumSet 时不能直接使用关键字 new 为其进行实例化,所以在此类中提供了很多的静态方法:
    在这里插入图片描述

    1. 将一个枚举中的全部内容设置到 EnumSet 集合中

    import java.util.EnumSet;
    
    enum Color {
        RED, GREEN, BLUE;//定义枚举的3个类型
    }
    
    public class Root{
        public static void main(String[] args) {
            EnumSet<Color> es = null;//声明一个 EnumSet
            System.out.println("===== EnumSet.allOf(Color.class) ====");
            es = EnumSet.allOf(Color.class);//将枚举的全部类型设置到 EnumSet 对象中
            print(es);
        }
    //    专门的输出操作,循环输出 EnumSet 中内容
        public static void print(EnumSet<Color> temp){
            for (Color c:temp){
                System.out.print(c + "、");
            }
            System.out.println();
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    2. 只设置一个枚举的类型到集合中

    public class Root{
        public static void main(String[] args) {
            EnumSet<Color> es = null;//声明一个 EnumSet
            System.out.println("===== EnumSet.of(Color.class) ====");
            es = EnumSet.of(Color.BLUE);//设置一个枚举的内容
            print(es);
        }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7

    3. 创建只能放入指定枚举类型的集合

    public class Root{
        public static void main(String[] args) {
            EnumSet<Color> es = null;//声明一个 EnumSet
            System.out.println("===== EnumSet.of(Color.class) ====");
            es = EnumSet.noneOf(Color.class);//创建一个可以加入 Color 类型的对象
            es.add(Color.RED);//增加内容
            es.add(Color.GREEN);//增加内容
            print(es);
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    使用 EnumSet 提供的 static 方法 noneOf(),将集合设置成只能增加 Color 类型的集合,但并不设置任何的内容到集合中。

    4. 创建不包含指定元素的集合

    public class Root{
        public static void main(String[] args) {
            EnumSet<Color> esOld = null;//声明一个 EnumSet
            EnumSet<Color> esNew = null;//声明一个 EnumSet
            esOld = EnumSet.noneOf(Color.class);//创建一个可以加入 Color 类型的对象
            esOld.add(Color.RED);//增加内容
            esOld.add(Color.GREEN);//增加内容
            System.out.println("===== EnumSet.complementOf(es) =====");
            esNew = EnumSet.complementOf(esOld);//创建一个不包含指定元素的集合
            print(esNew);
        }
    //    专门的输出操作,循环输出 EnumSet 中内容
        public static void print(EnumSet<Color> temp){
            for (Color c:temp){
                System.out.print(c + "、");
            }
            System.out.println();
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述
    程序使用 noneOf() 建立了一个集合 esOld,又加入了两个内容,之后以 esOld 的集合为参考建立了一个新的集合,新的集合将不包含 esOld 中已有的内容

    5. 复制已有的内容

    public class Root{
        public static void main(String[] args) {
            EnumSet<Color> esOld = null;//声明一个 EnumSet
            EnumSet<Color> esNew = null;//声明一个 EnumSet
            esOld = EnumSet.noneOf(Color.class);//创建一个可以加入 Color 类型的对象
            esOld.add(Color.RED);//增加内容
            esOld.add(Color.GREEN);//增加内容
            System.out.println("===== EnumSet.copyOf(es) =====");
            esNew = EnumSet.copyOf(esOld);//从已有的集合中复制出内容
            print(esNew);
        }
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载