如何从EnumMap获取数组?

时间:2013-11-05 16:22:32

标签: java enums

在Java中,EnumMaps具有持续的访问时间,因为它们可以使用枚举的序数值作为索引来实现。

如果我有一个EnumMap,我怎样才能获得数组?

示例:

enum Abc { A, B, C };
EnumMap<Abc, String> abc = new EnumMap<Abc, String>(Abc.class);
abc.put(Abc.A, "α");
abc.put(Abc.B, "β");
abc.put(Abc.C, "γ");

String[] abcarray = ?;

变量abcarray应该包含与以这种方式初始化相同的内容:

String[] abcarray = new String[] { "α", "β", "γ" };

我在documentation找不到方法。为什么缺少这样的功能?

2 个答案:

答案 0 :(得分:2)

您可以通过the Map.values() method(请记住,EnumMap只是一个专门的Map):

String[] abcarray = abc.values().toArray(new String[abc.size()]);

对于原因为什么不存在这样的方法,我们只能推测。

但是在集合框架中有两个共同的主题,它们在这里发挥作用:

  • 通过链接更简单的操作(减少需要实施的操作/方法的总数,同时保持选项可用)来允许更复杂的操作。
  • 摆脱数组:一旦你进入“收集区”,它们就没有用了。

答案 1 :(得分:2)

这有点抽象......试试:

String[] abcarray = abc.values().toArray(new String[abc.size()]);