一、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