EnumSet类
定义:set接口的子类,所以内容无法重复,在使用EnumSet时不能直接使用new关键字为其实例化,所以此类中提供了很多静态方法。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。
public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E> implements Cloneable, Serializable
AbstractSet:所有set类型集合的最大父类
Cloneable:合法的对所有实例进行克隆(按字段复制)
Serializable:实现此接口用来实现对象序列化和反序列化
常用方法:
.allOf()创建一个包括指定元素类型的所有元素枚举set;
.complementOf()创建一个指定set与指定枚举set相同的枚举set,最初不包含指定set中所不包含的所有类型元素;
.noneOf()创建一个指定元素类型的空的枚举类型set;
示例:
public enum Entity {
white("白色",5),red("红色",4),black("黑色",3),blue("蓝色",2),green("绿色",1);
private String name ;
private int size ;
Entity(String name , int size) {
this.name = name;
this.size = size ;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name ;
}
public void setSize(int size) {
this.size = size ;
}
public int getSize() {
return size ;
}
}
public class EnumSetExample {
public static void main(String[] args) {
EnumSet<Entity> enumset = EnumSet.allOf(Entity.class);
System.out.println(enumset);
System.out.println("------------------------");
EnumSet<Entity> enumSet2 = EnumSet.noneOf(Entity.class);
enumSet2.add(Entity.white);
System.out.println(enumSet2);
System.out.println("------------------------");
EnumSet<Entity> enumSet3 = EnumSet.complementOf(enumSet2);
System.out.println(enumSet3);
}
}
[white, red, black, blue, green]
------------------------
[white]
------------------------
[red, black, blue, green]
------------------------
[white]
------------------------
[red, black, blue, green]
EnumMap类
定义:与枚举类型键一起使用的专用Map实现,枚举映射中所有的键都必须来自枚举类型,值可以自由定义。
public class EnumMap<K extends Enum<K>,V> extends AbstractMap<K,V> implements Serializable, Cloneable
AbstractMap:所有Map类型集合的最大父类
示例:
public class EnumMap<K extends Enum<K>,V> extends AbstractMap<K,V> implements Serializable, Cloneable
AbstractMap:所有Map类型集合的最大父类
示例:
public class EntityMapExample {
public static void main(String[] args) {
EnumMap<Entity, String> enumMap = new EnumMap<>(Entity.class);
for (Entity entity : Entity.values()) {
enumMap.put(entity,entity.getName());
}
System.out.println(enumMap);//直接打印集合
System.out.println("--------------------------");
System.out.println("分别取得Key/Value:");
Set<Map.Entry<Entity, String>> set = enumMap.entrySet();
Iterator<Map.Entry<Entity, String >> iterator = set.iterator() ;
while (iterator.hasNext()) {
Map.Entry<Entity, String> me = iterator.next();
System.out.println(me.getKey()+"="+me.getValue());//以迭代器循环的方式分别取得键值对
}
}
}
运行结果:
{white=白色, red=红色, black=黑色, blue=蓝色, green=绿色}
--------------------------
分别取得Key/Value:
white=白色
red=红色
black=黑色
blue=蓝色
green=绿色
--------------------------
分别取得Key/Value:
white=白色
red=红色
black=黑色
blue=蓝色
green=绿色