Java深拷贝和浅拷贝Map对象

Posted 赵广陆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java深拷贝和浅拷贝Map对象相关的知识,希望对你有一定的参考价值。

目录


1 将Map深拷贝到另一个Map对象当中

今天赋值的时候遇到的小坑

相关文章推荐:
Java克隆方式避免频繁创建对象优化方案 https://blog.csdn.net/ZGL_cyy/article/details/126556907

1.需求说明

将一个MapA对象中所有的键值对完全拷贝到另一个MapB对象中;

另一个MapB对象中原来的键值保持不变(不受影响);

拷贝成功后MapB对象当中的内容将不再随着MapA中内容的变化而变化。

2.代码实现

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
 * 复制map对象
 * @explain 将paramsMap中的键值对全部拷贝到resultMap中;
 * paramsMap中的内容不会影响到resultMap(深拷贝)
 * @param paramsMap
 *     被拷贝对象
 * @param resultMap
 *     拷贝后的对象
 */
public static void mapCopy(Map paramsMap, Map resultMap) 
    if (resultMap == null) resultMap = new HashMap();
    if (paramsMap == null) return;

    Iterator it = paramsMap.entrySet().iterator();
    while (it.hasNext()) 
        Map.Entry entry = (Map.Entry) it.next();
        Object key = entry.getKey();
        resultMap.put(key, paramsMap.get(key) != null ? paramsMap.get(key) : "");

    

3.测试

public class TestDemo 
    public static void main(String[] args) 

            Map<String, String> map = new HashMap<String, String>(1);
            map.put("name", "oldlu");
            Map<String, Object> map2 = new HashMap<String, Object>(1);
            map2.put("age", 28);
            // 测试一:是否实现拷贝
            mapCopy(map2, map);
            System.out.println(map);
            System.out.println(map2);
            // 测试二:拷贝后的map对象是否受原map对象的影响
            map2.clear();
            System.out.println(map);
            System.out.println(map2);


    
   

结果如图

同理resultMap.putAll也是深拷贝

2 浅拷贝Map

1 测试代码


public class TestDemo 
    public static void main(String[] args) 
        // 赋值操作:=只能实现浅拷贝,map中的内容发生变化,copyMap中的内容亦同步发生变化
        Map<String, String> map = new HashMap<String, String>(1);
        map.put("name", "oldlu");
        Map<String, String> copyMap = new HashMap<String, String>(1);
        // 实现浅拷贝的方式:使用=
        copyMap = map;
        map.remove("name");
        System.out.println("map:" + map);
        System.out.print("copyMap:" + copyMap);
    
  

测试结果

以上是关于Java深拷贝和浅拷贝Map对象的主要内容,如果未能解决你的问题,请参考以下文章

jquery怎样深拷贝一个数组

深入浅出:了解深拷贝和浅拷贝

Java中的深拷贝(深复制)和浅拷贝(浅复制)

python的深拷贝和浅拷贝

Java中的深拷贝和浅拷贝(转载)

Java深拷贝和浅拷贝(深克隆和浅克隆)