Java 如何从EnumMap获取数组?

Java 如何从EnumMap获取数组?,java,enums,Java,Enums,在Java中,EnumMaps具有恒定的访问时间,因为它们可以通过使用enum的序数值作为索引的数组来实现 如果我有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[] ab

在Java中,EnumMaps具有恒定的访问时间,因为它们可以通过使用enum的序数值作为索引的数组来实现

如果我有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 = ?;
我找不到一个方法。为什么缺少这样一个函数?

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

至于为什么不存在这样的方法,我们只能猜测

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

  • 通过链接更简单的操作来允许complexer操作(这减少了需要实现的操作/方法的总数,同时保持选项可用)
  • 摆脱阵列:一旦进入“收集区”,它们就没有实际用途
您可以通过(请记住,
EnumMap
只是一个专门的
Map
):

至于为什么不存在这样的方法,我们只能猜测

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

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

    • 它有点抽象。。。尝试:

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

      它有点抽象。。。尝试:

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

      这会为每个调用创建一个新数组吗?@ceving:如果按原样使用,则为“是”。但是你可以只传入一个你以前使用过的数组,而不是每次都重新创建一个(除非大小改变)。您无法(合法地)访问内部值数组,而且它也不会有您想要的内容(它将/可能大于abc.size(),并且具有“null”值)这会为每个调用创建一个新数组吗?@ceving:如果按原样使用,则是。但是你可以只传入一个你以前使用过的数组,而不是每次都重新创建一个(除非大小改变)。您无法(合法地)访问内部值数组,而且它也不会具有您想要的内容(它将/可能大于abc.size(),并且具有“null”值)
      String[] abcarray = abc.values().toArray(new String[abc.size()]);