在一些情况下 如果不进行深拷贝而是直接将一个值赋值给另一个变量 如果我们期望这两个变量相互不影响 那么实际情况可能往往出乎我们的意料

public class TestEasy {public static void main(String[] args) {//1.基本类型不需要深度拷贝Map<String, String> map11  = new HashMap<>();map11.put("test", "1111");Map<String, String> map22  = new HashMap<>();map22.putAll(map11);map22.put("test", "1234");System.out.println(map11);System.out.println(map22);System.out.println("");//2.非基本类型需要深度拷贝 比如Set<String>//不深度拷贝Map<String, Set<String>> map = new HashMap<String, Set<String>>();Set<String> set = new HashSet<>();set.add("aaaa");map.put("1", set);Map<String, Set<String>> map2 = new HashMap<>();map2.putAll(map);Set<String> set2;set2 = map2.get("1");set2.add("bbb");//map和map2实际还是指向同一个map 输出一样的内容System.out.println(map2.values());System.out.println(map.values());System.out.println("");//深度拷贝Map<String, Set<String>> mapDeep = new HashMap<String, Set<String>>();Set<String> setDeep = new HashSet<>();setDeep.add("aaaa");mapDeep.put("1", setDeep);Map<String, Set<String>> map2Deep = new HashMap<>();map2Deep = deepCopy(mapDeep);Set<String> set2Deep;set2Deep = map2Deep.get("1");set2Deep.add("bbb");//进行深拷贝后 内容不同了System.out.println(mapDeep.values());System.out.println(map2Deep.values());System.out.println("");//3.非基本类型需要深度拷贝 比如User//不深度拷贝Map<String, User> uMap = new HashMap<>();User user = new User("zhangsan", 12);uMap.put("1", user);Map<String, User> uMap2 = new HashMap<>();uMap2.putAll(uMap);User tempUser = uMap2.get("1");tempUser.setName("abc");System.out.println(uMap);System.out.println(uMap2);System.out.println("");//深度拷贝Map<String, User> uMapDeep = new HashMap<>();User userDeep = new User("zhangsan", 12);uMapDeep.put("1", userDeep);Map<String, User> uMap2Deep;uMap2Deep = deepCopyUser(uMapDeep);User tempUserDeep = uMap2Deep.get("1");tempUserDeep.setName("sadsa");System.out.println(uMapDeep);System.out.println(uMap2Deep);System.out.println("");}static Map<String, Set<String>> deepCopy(Map<String, Set<String>> original) {HashMap<String, Set<String>> copy = new HashMap<>();for (Map.Entry<String, Set<String>> entry : original.entrySet()) {copy.put(entry.getKey(),new HashSet<String>(entry.getValue()));}return copy;}static Map<String, User> deepCopyUser(Map<String, User> original) {HashMap<String, User> copy = new HashMap<>();for (Map.Entry<String, User> entry : original.entrySet()) {copy.put(entry.getKey(),new User(entry.getValue().getName(),entry.getValue().getAge()));}return copy;}
}
public class User {private String name;private int age;User(String name,int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return name + age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

输出

{test=1111}
{test=1234}[[bbb, aaaa]]
[[bbb, aaaa]][[aaaa]]
[[bbb, aaaa]]{1=abc12}
{1=abc12}{1=zhangsan12}
{1=sadsa12}

Java的深拷贝的例子相关推荐

  1. 学习Java的深拷贝和浅拷贝

    关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象.可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用 ...

  2. fasttext的基本使用 java 、python为例子

    fasttext的基本使用 java .python为例子 今天早上在地铁上看到知乎上看到有人使用fasttext进行文本分类,到公司试了下情况在GitHub上找了下,最开始是c++版本的实现,不过有 ...

  3. Java基础 深拷贝浅拷贝

    Java基础 深拷贝浅拷贝 非基本数据类型 需要new新空间 class Student implements Cloneable{private int id;private String name ...

  4. [转]jackson json字符串、map、java对象的转换例子

    ackson框架 json字符串.map.java对象的转换例子 先下载框架jar包: 下面是一些例子: package jackson; import java.io.File; import ja ...

  5. java实现死锁简单例子,Java死锁的简单例子

    Java死锁的简单例子 两个线程互相占有对方需要的资源而不释放,便形成了死锁. 代码如下: Program.java /** * 程序类 * @author michael * */ public c ...

  6. Java的深拷贝和浅拷贝

     熟悉C++的朋友对这个话题应该很熟悉,浅拷贝就是指两个对象共同拥有同一个值,一个对象改变了该值,也会影响到另一个对象.深拷贝就是两个对象的值相等,但是互相独立.本来想把以前写的一篇文章扩充一下,没想 ...

  7. java 对象深拷贝_java深入理解浅拷贝和深拷贝

    简介 拷贝对象是java中经常会遇到的问题.java中存在两种类型,基础类型和引用类型. java的赋值都是传值的,对于基础类型来说,会拷贝具体的内容,但是对于引用对象来说,存储的这个值只是指向实际对 ...

  8. java List深拷贝的两种方式

    大家都知道java里面分为浅拷贝和深拷贝.举个简单的例子,区分一下浅拷贝和深拷贝的区别 public class Address{private String address;public Addre ...

  9. java:深拷贝与浅拷贝

    拷贝的实现: 只有子类实现了Cloneable接口后才可以使用Object类提供的clone方法. protected native Object clone() throws CloneNotSup ...

最新文章

  1. 享有的意思是_“fuck you money”不是“x你钱”,真实意思却是这个
  2. php通过正则提取页面相关信息
  3. 并发编程(三)原子操作CAS
  4. selenium python 入门-元素定位
  5. POJ 3683 Priest John's Busiest Day(2-ST)
  6. 大电流场效应管500a_不可不知的电子工程常用的6大电子元器件,了解一下!
  7. 百度地图经纬度获取标点与城市编码
  8. python教材答案第四章_第四章-习题答案
  9. 计算机制图系统的组成,lesson02-计算机机地图制图系统的组成.ppt
  10. reset()方法 submit()方法
  11. 元语言基础技术之:在JS中如何自由地创建函数
  12. VS修改MFC工程的程序图标
  13. html英文颜色大全,html英文颜色名称全集
  14. 云虚拟主机☀️利用FileZilla,使用FTP协议给阿里云虚拟主机上传、下载文件
  15. 网站QQ客服链接代码
  16. mysql select having_MySQL中SELECT子句WHERE和HAVING的区别
  17. 股票历史数据-股票历史行情数据查询
  18. 推进网络强国建设,筑牢网络安全屏障
  19. 超牛逼!这款开源性能监控系统真强大~
  20. 安装、卸载mysql服务命令

热门文章

  1. html字体代码大全_HTML基础笔记(一)
  2. Python学习之旅:用Python制作一个打字训练小工具
  3. c#(.net)对dbf(arcgis shp属性表)的操作 (验证版)
  4. ASP.NET MVC 4 内容映射
  5. 2017年3月27日上午学习日志
  6. HttpHandler和HttpModule 心得介绍
  7. leetcode 1223 python
  8. mysql schema数据混乱_MySQL之Schema与数据类型优化
  9. 通过as写一个简单的按键_自己写一个简单的二维魔方游戏
  10. java求数组和值_用java编写数组求和,array[]和ArrayList()?