首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

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

2012-05-12 
用HashMap存数据,然后赋值给另外一个Map类型的变量,更新另外一个变量后,原始的变量的值也更新了。目前,我有

用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);    } 

热点排行