代码之家  ›  专栏  ›  技术社区  ›  Michaël BadZen

是否有实现LinkedHashMap数组的方法?

  •  0
  • Michaël BadZen  · 技术社区  · 14 年前

    我正在尝试实现一个LinkedHashMap数组,但我不知道它是否可能…

    目前,我的代码如下:

    public class LHMap {
    
        public static void main(String[] args) {
    
         LinkedHashMap<String, Integer>[] map = null;
    
      for (int i = 0; i < 5; i++) {
             map[i] = new LinkedHashMap<String, Integer>();
      }
    
      map[0].put("a", 0);
      System.out.println(map[0].get("a"));
    
     }
    }
    

    
    System.out.println(extracted(map)[0].get("a"));
    
    返回“NullPointerException”…

    你知道如何实现这个吗?

    编辑:1.擦除提取(),2.表->数组

    2 回复  |  直到 8 年前
        1
  •  2
  •   Vivin Paliath    14 年前

    我不知道你的 extracted() 方法正在尝试执行。你得到了一个 NullPointerException 因为你路过 map 进入之内 extracted 然后你马上把它还给我。在你的例子中,你是在传递信息 null 然后把它还回去。你找不到我 空数组上的下标(或任何下标)。

    而不是 LinkedHashMap ,会有一个 List 工作?

    List<Map<String, Integer>> listOfMaps = new ArrayList<Map<String, Integer>>();
    
    for(int i = 0; i < 5; i++) {
       listOfMaps.add(new LinkedHashMap<String, Integer>());
    }
    
    listOfMaps.get(0).put("a", 0);
    System.out.println(listOfMaps.get(0).get("a"));
    

    编辑

    顺便说一下,不能用泛型实例化数组。如果你想要类型安全的话,我建议你按照清单去做。否则,你就得处理:

    LinkedHashMap<String, Integer>[] map = new LinkedHashMap[5];
    

    然而,这会给你警告。

        2
  •  0
  •   Community CDub    8 年前
    map[i] = new LinkedHashMap<String, Integer>();
    

    这将导致NPE,因为您从未初始化映射,或者更确切地说,您显式地将其初始化为空:

    LinkedHashMap<String, Integer>[] map = null;
    

    编辑:

    您需要实例化数组,例如:

    map = (LinkedHashMap<String, Integer>[]) new LinkedHashMap[5];
    

    尽管您会收到一个“未选中的转换”警告。同时检查 this 对于一般数组创建问题(感谢那些指出它的人)。

    推荐文章