清除地图后保留主地图的值

时间:2017-12-10 16:19:53

标签: java

我有mainHolder地图,其中包含另一个地图holder,因为我在清除持有人地图时遇到问题,我正在忽略applemainHolder键的线索地图。

如何在清除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]]

1 个答案:

答案 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);