本章目标
掌握EnumMap类的使用
掌握EnumSet类的使用
类集对枚举的支持
在JDK 1.5的java.util 程序包中提供两个新的集合操作类:EnumMap 和 EnumSet,这两个类与枚举类型的结合应用可使以前非常繁琐的程序变得简单方便。EnumSet类提供了java.util.Set接口的一个特殊实现,而EnumMap类提供了java.util.Map接口的一个特殊实现,该类中的键(key)是一个枚举类型。
EnumMap
EnumMap是Map接口的子类,所以本身还是以Map的形式进行操作,即:key —> value。如果要想使用EnumMap,则首先要创建EnumMap的对象,在创建此对象的时候必须指定要操作的枚举类型,所以构造方法如下所示:
——public EnumMap(Class<K> keyType)
验证EnumMap
import java.util.EnumMap;
import java.util.Map;
enum Color{
RED,GREEN,BLUE;//定义枚举的 3 个类型
}
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.ordinal() +" --> "+c.name());
}
System.out.println("======= 输出全部的键值 =======");
for(Color c:desc.keySet()){//取得全部的 key
System.out.print(c.name()+"、");
}
System.out.println("\n======= 输出全部的内容 =======");
for(String s:desc.values()){//取得全部的 value
System.out.print(s+"、");
}
}
/* 结果:
* ======= 输出全部内容 =======
* 0 --> RED
* 1 --> GREEN
* 2 --> BLUE
* ======= 输出全部内容 =======
* RED、GREEN、BLUE、
* ======= 输出全部内容 =======
* 红色、绿色、蓝色、
* */
}
EnumSet
EnumSet是Set接口的子类,所以里面的内容是无法重复的,在使用EnumSet的时候是不能直接使用关键字new为其进行实例化的,所以在此类中提供了很多的静态方法。
EnumSet类的常用方法
验证EnumSet —— 将全部的集合设置到EnumSet集合之中
import java.util.EnumSet;
enum Color{
RED,GREEN,BLUE;//定义枚举的 3 个类型
}
public class EnumSetDemo01 {
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+"、");
}
}
/* 结果:
* ====== EnumSet.allOf(Color.class) ======
* RED、GREEN、BLUE、
* */
}
验证EnumSet —— 只设置一个枚举的类型到集合之中
import java.util.EnumSet;
enum Color{
RED,GREEN,BLUE;//定义枚举的 3 个类型
}
public class EnumSetDemo02 {
public static void main(String[] args) {
EnumSet<Color> es = null;//声明一个 EnumSet 对象
System.out.println("====== EnumSet.of(Color.BLUE) ======");
es = EnumSet.of(Color.BLUE);//设置一个枚举的内容
print(es);
}
public static void print(EnumSet<Color> temp){//专门的输出操作
for(Color c:temp){//循环输出 EnumSet 中的内容
System.out.print(c+"、");
}
}
/* 结果:
* ====== EnumSet.of(Color.BLUE) ======
* BLUE、
* */
}
验证EnumSet —— 创建只能放入指定枚举类型的集合
import java.util.EnumSet;
enum Color{
RED,GREEN,BLUE;//定义枚举的 3 个类型
}
public class EnumSetDemo03 {
public static void main(String[] args) {
EnumSet<Color> es = null;//声明一个 EnumSet 对象
System.out.println("====== EnumSet.noneOf(Color.class) ======");
es = EnumSet.noneOf(Color.class);//创建一个可以加入 Color 类型的对象
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+"、");
}
}
/* 结果:
* ====== EnumSet.noneOf(Color.class) ======
* RED、GREEN、
* */
}
验证EnumSet —— 创建不包含指定元素的集合
import java.util.EnumSet;
enum Color{
RED,GREEN,BLUE;//定义枚举的 3 个类型
}
public class EnumSetDemo04 {
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);
}
public static void print(EnumSet<Color> temp){//专门的输出操作
for(Color c:temp){//循环输出 EnumSet 中的内容
System.out.print(c+"、");
}
}
/* 结果:
* ====== EnumSet.complementOf(es) ======
* BLUE、
* */
}
验证EnumSet —— 拷贝已有的内容
import java.util.EnumSet;
enum Color{
RED,GREEN,BLUE;//定义枚举的 3 个类型
}
public class EnumSetDemo05 {
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);
}
public static void print(EnumSet<Color> temp){//专门的输出操作
for(Color c:temp){//循环输出 EnumSet 中的内容
System.out.print(c+"、");
}
}
/* 结果:
* ====== EnumSet.copyOf(es) ======
* RED、GREEN、
* */
}