如何在HashMap中保存枚举类?

时间:2015-06-28 20:48:21

标签: java dictionary enums hashmap

让我们说我们有以下枚举:

public enum AnimalImages {
TIGER,BEAR,WOLF;
}

public enum CarImages {
BMW,VW,AUDI;
}

现在我想将这些枚举类保存在HashMap中:

Map<String,Enum<?>> enumMap=new HashMap<String,Enum<?>>();
enumMap.put("AnimalImages",???????);

我应该输入什么而不是问号?

3 个答案:

答案 0 :(得分:4)

要明确回答您的问题,您必须将枚举值设为:

Map<String,Enum<?>> enumMap=new HashMap<String,Enum<?>>();
enumMap.put("AnimalImages", AnimalImages.TIGER);

但是,如果您想将所有值都归入枚举,那么您可以使用values()方法并将地图更改为Map<String,Enum<?>[]>,以便您可以使用此功能:

Map<String,Enum<?>[]> enumMap=new HashMap<String,Enum<?>[]>();  // Note Enum<?>[] array
enumMap.put("AnimalImages", AnimalImages.values());
enumMap.put("CarImages", CarImages.values());

缩短签名的另一种方法可能是这样的:

Map<String, Object> enumMap = new HashMap<String,Object>();
enumMap.put("AnimalImages", AnimalImages.values());
enumMap.put("CarImages", CarImages.values());

bali182 在此评论中指出的另一种方式,您可以使用:

Map<String, Collection<? extends Enum<?>>> enumMap = new HashMap<>();
enumMap.put("AnimalImages", Arrays.asList(AnimalImages.values()));
enumMap.put("CarImages", Arrays.asList(AnimalImages.values()));

答案 1 :(得分:1)

回答你的问题:

enumMap.put("AnimalImages", AnimalImages.WOLF);
enumMap.put("Cars", CarImages.AUDI);

但你也可以

Map<String, AnimalImages> enumMap = new HashMap<String, AnimalImages>();

这样enumMap.get("AnimalImages"),这样你就不必输入检查并投射它。

答案 2 :(得分:0)

如果要求是创建包含给定Map的所有值的enum,我会使用String个键映射到EnumSet值:

Map<String, EnumSet<?>> enumMap = new HashMap<String, EnumSet<?>>();
enumMap.put("AnimalImages", EnumSet.allOf(AnimalImages.class));
enumMap.put("CarImages", EnumSet.allOf(CarImages.class));

for (Map.Entry<String, EnumSet<?>> e : enumMap.entrySet()) {
    System.out.println(String.format("key: [%s], values: %s", 
        e.getKey(), e.getValue().toString()));
}

EnumSet是一个专门的Set实现,在内部表示为位向量。其唯一目的是提供一种有效且简便的方式来存储enum