类集对enum的支持。

1,EmumMap

public class EnumMap<K extends Enum<K>,V>extends AbstractMap<K,V>implements Serializable, Cloneable

发现继承了abstractMap类,说明是Map子类。

继承了Serializable,说明这个类可以被序列化。

继承了Cloneable,说明了这个类可以被克隆。

构造方法:

常用方法:

实例1代码package 类集;import java.util.EnumMap;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

enum Color{
    RED,GREEN,BLUE ;
}
public class test1{
    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)) ;  //get(Object key)返回对应键所对应的内容。
        }
        System.out.println("====== 输出全部的键值 ======") ;
        for(Color c:desc.keySet()){  //遍历emumMap对象的键值集合,集合的单元key的类型是Color枚举类型。
            System.out.print(+ "、") ;
               System.out.println() ;
        System.out.println("====== 输出全部的内容 ======") ;
        for(String s:desc.values()){    //values()返回此映射中所包含值的 Collection 视图。
System.out.print(s + "、") ;
        }    }
}

输出结果:

====== 输出全部的内容 ======
RED --> 红色
GREEN --> 绿色
BLUE --> 蓝色
====== 输出全部的键值 ======
RED、GREEN、BLUE、
====== 输出全部的内容 ======
红色、绿色、蓝色、

 

2,EnumSet

EnumSet是Set子类,里面内容无法重复,使用的时候,不能直接使用关键字new实例化。所以提供了很多静态方法

依次验证方法:

1,将全部集合设置到EnumSet集合中。

allOf(Class<E> elementType)

package 类集;
import java.util.EnumSet;
enum Color{
    RED,GREEN,BLUE ;
}
public class test1{
    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) ;
    }
    public static void print(EnumSet<Color> temp){    // 专门的输出操作
        for(Color c:temp){        //  循环输出EnumSet中的内容
            System.out.print(c + "、") ;
        }
        System.out.println() ;
    }
}

输出:

======== EnumSet.allOf(Color.class) =====
RED、GREEN、BLUE、

上面成功将枚举的全部类型设置到enumSet中

 

2,只设置集合中一个对象到enumSet中。

static <E extends Enum<E>>  EnumSet<E>  of(E e)       创建一个最初包含指定元素的枚举 set。 
static <E extends Enum<E>>  EnumSet<E>  of(E first, E... rest)      创建一个最初包含指定元素的枚举 set。 
static <E extends Enum<E>>  EnumSet<E>   of(E e1, E e2)   创建一个最初包含指定元素的枚举 set。 
static <E extends Enum<E>>  EnumSet<E>   of(E e1, E e2, E e3)    创建一个最初包含指定元素的枚举 set。 
static <E extends Enum<E>>  EnumSet<E>   of(E e1, E e2, E e3, E e4)     创建一个最初包含指定元素的枚举 set。 
static <E extends Enum<E>>  EnumSet<E>   of(E e1, E e2, E e3, E e4, E e5)      创建一个最初包含指定元素的枚举 set。 

范例:

package 类集;
import java.util.EnumSet;

enum Color{
    RED,GREEN,BLUE ;
}
public class test1{
    public static void main(String args[]){
        EnumSet<Color> es = null ;            // 声明一个EnumSet对象
        System.out.println("======== EnumSet.of(Color.BLUE) =====") ;
        es = EnumSet.of(Color.BLUE) ;    // 将枚举的全部类型设置到EnumSet对象之中
        print(es) ;
    }
    public static void print(EnumSet<Color> temp){    // 专门的输出操作
        for(Color c:temp){        //  循环输出EnumSet中的内容
            System.out.print(c + "、") ;
        }
        System.out.println() ;
    }
}

输出结果:

======== EnumSet.of(Color.BLUE) =====
BLUE、

 

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

可能同时有多个类型的枚举对象,但是一个集合中只要求放入指定类型的枚举。

static <E extends Enum<E>>  EnumSet<E>   noneOf(Class<E> elementType) 
    创建一个具有指定元素类型的空枚举 set。 

范例:

package 类集;
import java.util.EnumSet;

enum Color{
    RED,GREEN,BLUE ;
}
public class test1{
    public static void main(String args[]){
        EnumSet<Color> es = null ;            // 声明一个EnumSet对象
        System.out.println("======== EnumSet.noneOf(Color.class) =====") ;
        es = EnumSet.noneOf(Color.class) ;    // 将枚举的全部类型设置到EnumSet对象之中
        es.add(Color.RED) ;    // 增加内容
        es.add(Color.GREEN) ;    // 增加内容
        print(es) ;
    }
    public static void print(EnumSet<Color> temp){    // 专门的输出操作
        for(Color c:temp){        //  循环输出EnumSet中的内容
            System.out.print(c + "、") ;
        }
        System.out.println() ;
    }
}

输出结果:

======== EnumSet.noneOf(Color.class) =====
RED、GREEN、

 

还可以创建不包含指定元素的集合。

static <E extends Enum<E>>  EnumSet<E>   complementOf(EnumSet<E> s) 
创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含指定 set 中所不 包含的此类型的所有元素。 

范例:

package 类集;
import java.util.EnumSet;

enum Color{
    RED,GREEN,BLUE ;
}
public class test1{
    public static void main(String args[]){
        EnumSet<Color> esOld = null ;            // 声明一个EnumSet对象
        EnumSet<Color> esNew = null ;
        System.out.println("======== EnumSet.complementOf(Color.class) =====") ;
        esOld = EnumSet.noneOf(Color.class) ;    // 将枚举的全部类型设置到EnumSet对象之中
        esOld.add(Color.RED) ;    // 增加内容
        esOld.add(Color.GREEN) ;    // 增加内容
        esNew = EnumSet.complementOf(esOld) ;    // 不包含指定内容
        print(esNew) ;
    }
    public static void print(EnumSet<Color> temp){    // 专门的输出操作
        for(Color c:temp){        //  循环输出EnumSet中的内容
            System.out.print(c + "、") ;
        }
        System.out.println() ;
    }
}

输出结果:

======== EnumSet.complementOf(Color.class) =====
BLUE、

发现,esnew对象中值为枚举类中除了esold对象中的值的其他值。例如这里是去掉了esold里面的RED,GREEN后,枚举类中剩下的BLUE.

 

拷贝集合中的值给另一个enumSet对象。

static <E extends Enum<E>>  EnumSet<E>  copyOf(Collection<E> c) 
  创建一个从指定 collection 初始化的枚举 set。 

范例:

package 类集;
import java.util.EnumSet;

enum Color{
    RED,GREEN,BLUE ;
}
public class test1{
    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() ;
    }
}

结果:

======== EnumSet.copyOf(Color.class) =====
RED、GREEN、

 

总结:

1,enumMap是符合Map操作形式的,而enumSet基本就是静态方法完成的。

2,操作中大量使用了枚举.Class。反射机制。

posted @ 2017-01-08 18:27  美好的明天  阅读(396)  评论(0编辑  收藏  举报