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