我有mainHolder
地图,其中包含另一个地图holder
,因为我在清除持有人地图时遇到问题,我正在忽略apple
中mainHolder
键的线索地图。
如何在清除holder
地图后保留mainHolder地图的值?
代码
import java.util.HashMap;
import java.util.LinkedHashMap;
public class Generator {
public static void main(String[] args) {
LinkedHashMap<String, Object> holder = new LinkedHashMap<String, Object>();
final HashMap<String, LinkedHashMap<String, Object>> mainHolder = new LinkedHashMap<String, LinkedHashMap<String, Object>>();
holder.put("firstName", "Alex");
holder.put("lastName", "Cruz");
mainHolder.put("apple", holder);
holder.clear(); //After Clearing the map I am loosing the value in the mainHolder for 'apple'
holder.put("quantity", 13);
mainHolder.put("apple", holder);
System.out.println("Test");
}
}
mainHolder 最后应包含以下内容:
[apple:[firstName:Fadi,lastName:Cruz,数量:13]]
答案 0 :(得分:1)
发生这种情况的原因是因为您使用相同的密钥。
如果地图以前包含该键的映射,则为旧值 被替换了。
<强>更新强>
&lt;&gt; .add(map)会在列表中添加对地图的引用,因此它不是 复制。然后当你执行map.clear()之后,它会删除内容 也是列表中的地图,因为它是完全相同的对象。做 &lt;&gt; .add(map.clone())代替或(最好)执行map = new HashMap&lt;&gt;();
<强>溶液强>
LinkedHashMap<String, Object> holder = new LinkedHashMap<String, Object>();
final HashMap<String, LinkedHashMap<String, Object>> mainHolder = new LinkedHashMap<String, LinkedHashMap<String, Object>>();
holder.put("firstName", "Alex");
holder.put("lastName", "Cruz");
mainHolder.put("apple", holder);
holder = new LinkedHashMap<>();
LinkedHashMap<String, Object> temp = mainHolder.get("apple");
temp.put("quantity",13);
mainHolder.put("apple",temp);
System.out.println(mainHolder);