`

Java的深度复制与浅层复制(二)

阅读更多
也可利用序列化与反序列化对对象进行深度复制

   1. public class Student implements Serializable {  
   2.   
   3.     private String name;  
   4.     private String tel;  
   5.     private int age;  
   6.       
   7.     //set and get.....  
   8. }  
   9.   
  10. public class Teacher implements Serializable {  
  11.   
  12.     private String name;  
  13.     private int age;  
  14.     private List<Student> stuList;  
  15.   
  16.     //set and get....  
  17.   
  18. }  
  19.   
  20. import java.io.ByteArrayInputStream;  
  21. import java.io.ByteArrayOutputStream;  
  22. import java.io.IOException;  
  23. import java.io.ObjectInputStream;  
  24. import java.io.ObjectOutputStream;  
  25. import java.util.ArrayList;  
  26. import java.util.List;  
  27.   
  28. public class Test {  
  29.   
  30.       
  31.     public static void main(String[] args) {  
  32.         Student s1 = new Student();  
  33.         s1.setName("Wang");  
  34.         s1.setAge(25);  
  35.         s1.setTel("110");  
  36.         Student s2 = new Student();  
  37.         s2.setName("Li");  
  38.         s2.setAge(35);  
  39.         s2.setTel("119");  
  40.           
  41.           
  42.         Teacher t = new Teacher();  
  43.         t.setName("Zhang");  
  44.         t.setAge(50);  
  45.         List<Student> stuList = new ArrayList<Student>();  
  46.         stuList.add(s1);  
  47.         stuList.add(s2);  
  48.         t.setStuList(stuList);        
  49.         System.out.println("t: "+t);  
  50.         System.out.println("s1: "+s1);  
  51.         System.out.println("s2: "+s2);  
  52.         System.out.println("after clone--------------");  
  53.         Teacher t2 = (Teacher) depthClone(t);  
  54.         System.out.println("t2: "+t2);  
  55.         System.out.println("t: "+t);  
  56.           
  57.         Student s3 = t2.getStuList().get(0);  
  58.         Student s4 = t2.getStuList().get(1);  
  59.         System.out.println("s3: "+s3);  
  60.         System.out.println("s1: "+s1);  
  61.         System.out.println("s4: "+s4);  
  62.         System.out.println("s2: "+s2);  
  63.           
  64.         System.out.println("after change--------------");  
  65.         t2.setAge(55);  
  66.         t2.setName("Zhao");  
  67.           
  68.         System.out.println("t2 Name: "+t2.getName()+" t2 age"+t2.getAge());  
  69.         System.out.println("t Name: "+t.getName()+" t age"+t.getAge());  
  70.   
  71.     }  
  72.       
  73.     private static Object depthClone(Object srcObj){  
  74.         Object cloneObj = null;  
  75.         try {  
  76.             ByteArrayOutputStream out = new ByteArrayOutputStream();  
  77.             ObjectOutputStream oo = new ObjectOutputStream(out);  
  78.             oo.writeObject(srcObj);  
  79.               
  80.             ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());  
  81.             ObjectInputStream oi = new ObjectInputStream(in);  
  82.             cloneObj = oi.readObject();           
  83.         } catch (IOException e) {  
  84.             e.printStackTrace();  
  85.         } catch (ClassNotFoundException e) {  
  86.             e.printStackTrace();  
  87.         }  
  88.         return cloneObj;  
  89.     }  
  90.   
  91. }  


输入结果:
t: jame.jsp.bean.Teacher@affc70
s1: jame.jsp.bean.Student@1e63e3d
s2: jame.jsp.bean.Student@1004901
after clone--------------
t2: jame.jsp.bean.Teacher@1f14ceb
t: jame.jsp.bean.Teacher@affc70
s3: jame.jsp.bean.Student@f0eed6
s1: jame.jsp.bean.Student@1e63e3d
s4: jame.jsp.bean.Student@1d05c81
s2: jame.jsp.bean.Student@1004901
after change--------------
t2 Name: Zhao t2 age55
t Name: Zhang t age50

* 本文内容摘自 http://qhhhn.iteye.com/blog/189498
分享到:
评论

相关推荐

    由浅层学习迈向深度学习——小学数学教学中深度学习点的设计与运用.pdf

    "由浅层学习迈向深度学习——小学数学教学中深度学习点的设计与运用" 本文主要探讨小学数学教学中深度学习点的设计与运用,旨在引导学生由浅层学习迈向深度学习。文章首先提出了问题情境的设置,强调情感驱动的价值...

    从浅层学习到深度学习.pdf

    本文所指的深度学习,是指在传统浅层学习的基础上,能够对学生的学习过程进行深入、系统、持续的认知活动,从而更好地理解和运用知识,而浅层学习通常是一种表面的学习,主要依赖记忆、重复和简单的应用,缺乏对知识...

    JavaScript浅层克隆与深度克隆示例详解

    JavaScript中的浅层克隆与深度克隆是两种不同的对象复制方式,它们主要处理对象和数组这类引用类型的数据。这两种克隆方法的区别在于处理对象内部引用值的方式,即对堆内存中对象的复制程度。 1. **浅层克隆**: ...

    《文本分类大综述:从浅层到深度学习》

    "文本分类大综述:从浅层到深度学习" 文本分类是自然语言处理中的基本任务之一。过去十年,深度学习的成功使得该领域的研究激增。为了满足全面和更新综述的需要,本综述从1961年到2020年对文本分类的发展进行了回顾...

    论浅层学习与深度学习.pptx

    浅层学习与深度学习是机器学习领域的两个重要分支,本文详细探讨了浅层学习和深度学习的概念、特点以及应用场景,并通过一个实践案例来具体分析它们的应用情况。 浅层学习 浅层学习是一种基于统计和概率模型的机器...

    浅层与深度强化学习“漏洞”分析报告PPT

    ### 浅层与深度强化学习“漏洞”分析报告 #### 知识点一:研究背景与应用背景 **研究背景**: 随着人工智能技术的发展,尤其是强化学习领域内的进步,研究者们越来越关注如何提高这些算法的安全性和鲁棒性。本研究...

    浅层LSTM改进HAR的深度学习

    浅层LSTM改进HAR的深度学习

    基于深度学习的地下浅层震源定位方法.pdf

    本文探讨了一种基于深度学习的地下浅层震源定位新方法,该方法采用了逆时聚焦技术和振幅叠加技术处理传感器阵列收集到的震动数据,并结合3D卷积神经网络(3D-CNN)建立端到端的学习模型来实现高精度的震源定位。...

    浅层地热能勘查评价规范

    浅层地热能指的是地球表层至200米深度范围内的地温层中的热能。这部分热能可以通过地源热泵技术、地热直接利用技术等进行采集和利用。由于浅层地热能是一种清洁、可再生的能源,对环境的污染较小,因此越来越受到...

    幼儿深度学习的基本特质与逻辑架构.pdf

    【幼儿深度学习与浅层学习的关系** 浅层学习通常关注知识的表面记忆,而深度学习则侧重于理解和应用。浅层学习为深度学习提供了基础知识,是深度学习的起点,而深度学习则在浅层学习的基础上,促进知识的整合、迁移...

    深度学习吴恩达课程笔记(二)-浅层神经网络、深层神经网络

    【深度学习吴恩达课程笔记(二)-浅层神经网络、深层神经网络】涵盖了神经网络的基础知识,包括浅层神经网络的构建与反向传播,激活函数的选择,以及深层神经网络的优势。 首先,浅层神经网络的核心是双层神经网络。...

    指向深度学习的语文大单元教学设计——兼谈统编本教材二年级下册第一单元的实践与思考.pdf

    深度学习与浅层学习不同,浅层学习更侧重于知识的获取和机械记忆,而深度学习则注重高层次思维的发展、问题解决、知识整合和迁移应用,它要求学习者积极参与、批判性地学习并能够将所学知识融入到认知结构中,进而...

    JavaScript 数组的深度复制解析

    对于javascript而言,数组是引用类型,如果要想复制一个数组就要动脑袋想想了,因为包括concat、slice在内的函数,都是浅层复制。也就是说,对于一个二维数组来说,用concat来做复制,第二维的数组还是引用,修改了...

    吴恩达Coursera深度学习课程 deeplearning.ai (1-3) 浅层神经网络--作业(可执行源码)

    吴恩达的Coursera深度学习课程是全球范围内广受欢迎的在线教育项目,...通过吴恩达的深度学习课程,学习者不仅可以理论结合实践,还可以获得构建和训练浅层神经网络的实践经验,为后续的深度学习进阶课程打下坚实基础。

    从浅层到深层:基于深度学习的初中数学课堂优化路径.pdf

    深度学习强调的是在原有知识、经验基础上的主动建构,以及将知识有效迁移应用到真实情境的过程,这与浅层学习相对立。 深度学习相较于浅层学习,强调在低阶思维能力向高阶思维能力的发展过程中,实现由简单知识结构...

    吴恩达深度学习课程第一课 第3周 浅层神经网络 编程作业(中、英文版本)

    在本节吴恩达老师的深度学习课程中,我们聚焦于第一课的主题——神经网络与深度学习,特别是第3周的内容,即浅层神经网络。这一周的编程作业旨在帮助学生深入理解并实践神经网络的基本构建块,无论是对于初学者还是...

    浅层学习引导深度学习

    详细介绍了机器学习的分类,对于初接触机器学习的有很大帮助

    java_经典多线程编程

    浅层复制与深层复制 - **知识点描述**:复制对象时,有两种主要的方式:浅层复制和深层复制。浅层复制只复制对象的第一层引用,而深层复制会递归地复制所有引用的对象。 - **详细说明**: - **浅层复制**:仅仅...

Global site tag (gtag.js) - Google Analytics