日期:2014-05-20  浏览次数:20877 次

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