当我尝试将hashMap添加到另一个HashMap时,我失去了旧的可变性。我该如何解决这个问题?我的代码是这样的。
HashMap<String, String> tmp = new HashMap<String, String>();
HashMap<String, String> map = new HashMap<String, String>();
tmp = ((HashMap<String, String>)intent.getSerializableExtra("map"));
map.putAll(tmp);
当我使用此代码时,map元素始终等于tmp元素。它不存储旧元素。
感谢您的帮助。
答案 0 :(得分:0)
HashMap<String, String> map = new HashMap<String, String>();
创建一个新的空HashMap实例。因此,在致电map.putAll(tmp)
后,您的地图只会包含tmp
。
如果map
有先前的条目,则不应为此变量分配新实例。
也就是说,即使map
有先前的条目,将tmp
的条目放入其中也会覆盖map
和{{1}中存在的所有密钥的值}。
答案 1 :(得分:0)
一旦您将地图更新为每次都不重新初始化,您可以通过循环覆盖来避免覆盖地图中的任何现有键值对:
for (String key : tmp.keySet()) {
if (!map.containsKey(key)) {
map.put(key, tmp.get(key);
}
}
我不确定你的问题是否这正是你所要求的,但它可能有用。如果你想为每个密钥存储多个字符串,Eran的建议(使用HashMap<String, List<String>>
)也是一个很好的建议。