Java 包含多个键的哈希映射的空指针

Java 包含多个键的哈希映射的空指针,java,data-structures,hashmap,Java,Data Structures,Hashmap,我的HashMap中有一个NullPointerException,包含多个键。我遇到了内存问题,并试图在不创建不必要变量的情况下压缩代码,因此我尝试这样做: HashMap<String,HashMap<String, ArrayList<HashMap<String, String>>>> data = new HashMap<>(); data .put(user, ne

我的
HashMap
中有一个
NullPointerException
,包含多个键。我遇到了内存问题,并试图在不创建不必要变量的情况下压缩代码,因此我尝试这样做:

        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>>());
知道为什么吗?我必须先创建变量吗?

.put(user,new HashMap())
如果
用户
键不在映射中,将返回null。否则,它将返回与该键关联的旧值

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

必须使用附加变量:

    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>>());
HashMap
data=newhashmap();
哈希映射
map2=新的HashMap();
data.put(用户,map2);
map2.put(info,newarraylist());
.put(user,new HashMap())
如果
user
键不在映射中,则将返回null。否则,它将返回与该键关联的旧值

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

必须使用附加变量:

    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>>());
HashMap
data=newhashmap();
哈希映射
map2=新的HashMap();
data.put(用户,map2);
map2.put(info,newarraylist());

根据java文档
HashMap.put(K键,V值)
返回

 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.)

根据java文档
HashMap.put(K键,V值)
返回

 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.)
HashMap data=newhashmap();
数据
.put(用户,新HashMap())
.put(info,new ArrayList());
HashMap data=newhashmap();
数据
.put(用户,新HashMap())
.put(info,new ArrayList());

put two.put只需向第一个键添加两个条目,我需要向第二个键添加条目。put只需向第一个键添加两个条目,我需要向第二个键添加条目以及一个附加变量。。。或者,邪恶的双括号符号。该死的。感谢您的回答,关于这一点,还有一个问题:在值中包含许多hashmaps和ArrayList,这是可以接受的做法吗?在处理这个问题时,你能给我一些关于内存管理的建议吗?我的建议,@joe-让你的代码尽可能可读。通过压缩内存和不引入变量,不会节省大量内存。如果你不瞄准可读性,你要做的就是让它花费昂贵的代价。“乔,也许你应该考虑把你的结构夷为平地。”用户类可以包含与用户相关的所有数据。如有必要,它甚至可能包含其他类(如UserInfo)的实例。使用这些嵌套映射很难理解您的代码。另一个变量。。。或者,邪恶的双括号符号。该死的。感谢您的回答,关于这一点,还有一个问题:在值中包含许多hashmaps和ArrayList,这是可以接受的做法吗?在处理这个问题时,你能给我一些关于内存管理的建议吗?我的建议,@joe-让你的代码尽可能可读。通过压缩内存和不引入变量,不会节省大量内存。如果你不瞄准可读性,你要做的就是让它花费昂贵的代价。“乔,也许你应该考虑把你的结构夷为平地。”用户类可以包含与用户相关的所有数据。如有必要,它甚至可能包含其他类(如UserInfo)的实例。使用这些嵌套映射很难理解代码。