您的位置:首页 > 编程语言 > Java开发

枚举:集合对enum的支持,EnumSet,EnumMap

2017-11-01 15:28 441 查看

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]

EnumMap类

定义:与枚举类型键一起使用的专用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=绿色
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息