java 复制Map对象(深拷贝与浅拷贝)

CreationTime--2018年6月4日10点00分

Author:Marydon

1.深拷贝与浅拷贝

  浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象,在内存中占用同一块内存;

  被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象;

  换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

  深拷贝:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量;

  那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象;

  换言之,深复制把要复制的对象所引用的对象都复制了一遍。

2.通过putAll()方法能够实现浅拷贝与深拷贝

  使用Map对象只能实现浅拷贝

public static void main(String[] args) {// Map只能实现浅拷贝,paramMap中的内容发生变化,paramMap2中的内容亦同步发生变化Map<String, String> paramMap = new HashMap<String, String>();paramMap.put("name", "Marydon");Map<String, String> paramMap2 = new HashMap<String, String>();// 实现浅拷贝方式一:使用=paramMap2 = paramMap;paramMap.remove("name");System.out.println(paramMap2);//{}// 实现浅拷贝方式二:使用Map.putAll()
    paramMap2.putAll(paramMap);paramMap.remove("name");System.out.println(paramMap2);//{}
}

  使用HashMap对象可是实现深拷贝

public static void main(String[] args) {// HashMap可以实现真正意义上深拷贝,注意不是MapHashMap<String, String> paramMap = new HashMap<String, String>();paramMap.put("name", "Marydon");HashMap<String, String> paramMap2 = new HashMap<String, String>();// 实现深拷贝:使用HashMap.putAll()
    paramMap2.putAll(paramMap);paramMap.remove("name");System.out.println(paramMap2);// {name=Marydon}
}

3.小结

  实现浅拷贝的方式有两种:=和Map.putAll();

  实现深拷贝:HashMap.putAll()。

  大多数情况下,我们需要实现的是深拷贝而不是浅拷贝;

  使用Map调用putAll()方法,并不是真正意义上的拷贝,Map对象B只是对Map对象A进行了引用,当Map对象A中的内容发生变化时,Map对象B也会发生变化;

  使用HashMap调用putAll()方法才是真正意义上的拷贝。

相关推荐:

  • java 将Map拷贝到另一个Map对象当中
  • java Map

转载于:https://www.cnblogs.com/Marydon20170307/p/9132042.html

java 复制Map对象(深拷贝与浅拷贝)相关推荐

  1. java map to map 拷贝_java复制Map 对象(深拷贝和浅拷贝)

    java复制Map 对象(深拷贝和浅拷贝) java复制Map 对象(深拷贝和浅拷贝) 2. 通过 putAll()方法能实现浅拷贝和深拷贝, 使用Map对象只能实现浅拷贝 public static ...

  2. map复制 java_java 复制Map对象(深拷贝与浅拷贝)

    1.深拷贝与浅拷贝 浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象,在内存中占用同一块内存: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象: 换言之 ...

  3. 更清晰的认识对象——深拷贝与浅拷贝

    对象在引用的时候引用的是对象的地址,所以导致如果修改其中一个对象,就会对其他引用这个地址的对象进行修改,这种结果并不是我们想要的,这个时候我们就要用到深拷贝和浅拷贝去解决这个问题了. var a = ...

  4. Java遍历Map对象的四种方法

    在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHa ...

  5. java之Map对象转java对象的两种简单方式

    我们在处理数据的时候,经常用到map对象转java对象,下面我们用代码演示下,希望能够帮助到有这方面需求的老哥. 要转换的java对象: public class Person {private In ...

  6. javascript java map_javascript实现java的map对象,js实现new map()

    /* * MAP对象,实现MAP功能 * * 接口: * size()     获取MAP元素个数 * isEmpty()    判断MAP是否为空 * clear()     删除MAP所有元素 * ...

  7. Java遍历Map对象的四种方式

    关于java中遍历map具体哪四种方式,请看下文详解吧. 方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. 1 2 3 4 Map<Integer, Intege ...

  8. Java遍历Map对象

    关于java中遍历map具体哪四种方式 方式一: 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer, Integer> map = new ...

  9. 《浅谈Java中数组的深拷贝和浅拷贝》

最新文章

  1. linux 开机自动启动服务
  2. 2012届华为校园招聘机试题
  3. 约瑟夫环问题(带密码)
  4. 新手攻略熔炉_【新手攻略】快速入门
  5. c语言传递多个参数给线程,关于ssl多线程参数的传递
  6. Java练习:tips.Print
  7. python装饰器的通俗理解_Python|闭包、装饰器,简单的实例,通俗的理解
  8. istio sidecar流量接管_Istio是个啥?看完此文彻底搞懂(赠书)
  9. 深度学习2.0-9.tensorflow的高阶操作之填充与复制
  10. 拓端tecdat|R语言使用倾向评分提高RCT(随机对照试验)的效率
  11. LoadRunner 11 安装及破解
  12. 计算机组成 超标量,计算机组成原理6-流水线、多发射和超标量、SIMD(示例代码)...
  13. day01 -Web API介绍—DOM 介绍—获取元素—事件基础—操作元素—排他操作—自定义属性操作—节点操作—案例:动态生成表格—创建元素的三种方式(经典面试题)
  14. Linux中离线安装R语言程序包
  15. css图片颜色设置为黑白
  16. Android开发概述
  17. 旷视 CEO 印奇:靠“刷脸”折腾出 120 亿的大生意
  18. flag 60牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,
  19. 贝叶斯网络学习总结与中科院…
  20. Java实操演练1——简单图书管理系统的设计与实现

热门文章

  1. 查看mysql半杯_如何通过show slave status的输出使用change master to命令 | 半瓶
  2. 【二分法】计蒜客:对数方程
  3. 【蓝桥结果填空】:时间显示
  4. ffmpeg系列-解复用流程解析
  5. 计算机专业基础857考试大纲,2018年哈尔滨工业大学854计算机基础考研大纲
  6. 键盘按下某键 停止运行java_Java:按下“Q”键后终止while循环
  7. iview tooltip自动消失_实现自动驾驶,为什么要对汽车、行人的轨迹进行预测?它与物体检测、追踪和路径规划间的关系是什么?...
  8. java boolean 包_java Boolean包装类工作笔记
  9. 编译原理 自顶向下分析
  10. Codeforces Round #466 (Div. 2): E. Cashback(单调队列+DP)