带有多个键的hashmap的空指针

时间:2014-10-20 06:59:58

标签: java data-structures hashmap

我的NullPointerException中包含多个密钥的HashMap。我遇到了内存问题并尝试压缩我的代码而不创建不必要的变量,所以我尝试这样做:

        HashMap<String,HashMap<String, ArrayList<HashMap<String, String>>>> data    =   new HashMap<>();

        data
        .put(user, new HashMap<String, ArrayList<HashMap<String,String>>>())
        .put(info, new ArrayList<HashMap<String, String>>());

我正在点击NullPointerException

.put(info, new ArrayList<HashMap<String, String>>());

知道为什么吗?我是否必须先创建变量?

3 个答案:

答案 0 :(得分:5)

如果.put(user, new HashMap<String, ArrayList<HashMap<String,String>>>())键已经不在地图中,

user将返回null。否则,它将返回与该键关联的旧值。

你应该链接你的put电话。即使您没有获得NullPointerException,您也无法获得所需的行为,因为第二个put.put(info, new ArrayList<HashMap<String, String>>()))将对旧值执行。除了错误之外,它还会降低您的代码的可读性。

您必须使用其他变量:

    HashMap<String,HashMap<String, ArrayList<HashMap<String, String>>>> 
      data = new HashMap<>();
    HashMap<String, ArrayList<HashMap<String,String>>> 
      map2 = new HashMap<String, ArrayList<HashMap<String,String>>>();
    data.put(user, map2);
    map2.put(info, new ArrayList<HashMap<String, String>>());

答案 1 :(得分:0)

根据java docs HashMap.put(K key, V value)返回

 the previous value associated with key, or null if there was no mapping for key.
 (A null return can also indicate that the map previously associated null with key.)

答案 2 :(得分:0)

  HashMap<String,HashMap<String, ArrayList<HashMap<String, String>>>> data    =   new HashMap<>();

    data
    .put(user, new HashMap<String, ArrayList<HashMap<String,String>>>())
    .put(info, new ArrayList<HashMap<String, String>>());