有没有办法实现LinkedHashMap数组?

时间:2010-11-08 22:50:29

标签: java nullpointerexception linkedhashmap

我正在尝试实现一个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。擦除extract(),2。table-&gt; array

2 个答案:

答案 0 :(得分:2)

我不知道您的extracted()方法尝试做什么。您收到NullPointerException,因为您已将map传递给extracted,然后您立即将其返回。在您的示例中,您传入null然后返回它。您无法在空数组上找到i th 下标(或任何下标)。

而不是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];

然而,这会给你警告。

答案 1 :(得分:0)

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

这将导致NPE,因为您从不初始化map,或者更确切地说,您将其显式初始化为NULL:

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

编辑:

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

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

虽然您将获得该代码的“未经检查的转化”警告。同时检查this是否存在通用数组创建问题(感谢那些指出它的人)。