当前位置: 代码迷 >> Java相关 >> 用HashMap存数据,然后赋值给另外一个Map类型的变量,更新另外一个变量后,原始的变量的值也更新了。该如何解决
  详细解决方案

用HashMap存数据,然后赋值给另外一个Map类型的变量,更新另外一个变量后,原始的变量的值也更新了。该如何解决

热度:7661   发布时间:2013-02-25 21:46:13.0
用HashMap存数据,然后赋值给另外一个Map类型的变量,更新另外一个变量后,原始的变量的值也更新了。
目前,我有如下两个变量:
Map map1=new HashMap();
Map map2=new HashMap();
现在我把map2的值赋给map1,然后更新map1,由于HashMap好像是地址引用,所以map2的值也被更新了。
但是我希望,更新map1的值,不改变map2的值。哪位高手有好点的办法,来备份一个原始的值的,帮忙解决下。谢谢啦。

------解决方案--------------------------------------------------------
不要把mp2 的值赋给 mp1,java 的 = 号是句柄赋值,你把 mp1 = mp2;后,两个都指向同一个值了,mp1 改变 mp2 也会改变。所以你要两个互不干扰,不能用 = 赋值,只能把里面的东西拿出来,再放到另一个里面。
------解决方案--------------------------------------------------------
深度clone一份map
------解决方案--------------------------------------------------------
Java code
HashMap map1 = new HashMap();        HashMap map2 = new HashMap();        for(Iterator it = map1.keySet().iterator() ; it.hasNext();){            String key = it.next().toString();            map2.put(key, map1.get(key));        }
------解决方案--------------------------------------------------------
Java code
    public static void main(String args[]) {        HashMap map1 = null;        HashMap map2 = new HashMap();        map2.put("1", "Hello");map2.put("2", "World");        map1 =(HashMap)map2.clone();        System.out.println(map1);        System.out.println(map2);        map1.put("1",(String)map1.get("1") + "World");        System.out.println(map1);        System.out.println(map2);    }
  相关解决方案