带有多个键的hashmap的空指针

joe*_*joe 1 java hashmap data-structures

我得到一个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>>());
Run Code Online (Sandbox Code Playgroud)

我正在接受NullPointerException:

.put(info, new ArrayList<HashMap<String, String>>());
Run Code Online (Sandbox Code Playgroud)

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

Era*_*ran 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>>());
Run Code Online (Sandbox Code Playgroud)