package com.softstome.clone.arrayCopy.internet;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import com.softstome.clone.Phone;
import com.softstome.clone.Student;
public class ListCopyDemo {
/*
* 使用序列化方法方法 ,实现集合的深层复制(推荐)
*
* 这也可以用来对象的克隆
* */
public static <T> List<T> deepCopy(List<T> src) throws IOException, ClassNotFoundException {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(src);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
@SuppressWarnings("unchecked")
List<T> dest = (List<T>) in.readObject();
return dest;
}
public static Object deepCopyObj(Object src) throws IOException, ClassNotFoundException {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(src);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
@SuppressWarnings("unchecked")
Object dest = in.readObject();
return dest;
}
public static void main(String[] args) throws ClassNotFoundException, IOException {
// 集合的深层复制
/* List<Person> srcList=new ArrayList<Person>();
srcList.add(new Person(10,"张三"));
srcList.add(new Person(11,"李四"));
List<Person> descList=null;
descList=ListCopyDemo.deepCopy(srcList);
srcList.get(0).setName("张三1");
System.out.println(srcList);
System.out.println(descList);*/
/*
* 对象的深层复制
* */
/* Person src=new Person(12,"小杏");
Person desc=ListCopyDemo.deepCopyObj(src);
src.setAge(14);
System.out.println(src);
System.out.println(desc);*/
/*
* 对于有成员对象的对象的复制
* */
Student stu= new Student(2010032123, "周沈洁", new Phone("白色", "中兴"));
Student stu1=(Student)ListCopyDemo.deepCopyObj(stu);
stu.setStname("董洁");
stu.getPhone().setColor("黑色");
System.out.println(stu+" "+stu.getPhone());
System.out.println(stu1+" "+stu1.getPhone());
}
}
//说明 :Student类与Phone类在 :深层复制与浅层复制(通过clone的方式)中有,这里就不重复了
分享到:
相关推荐
【序列化数据序列化数据】是指将对象的状态信息转换为可以存储或传输的形式,以便于在需要时恢复对象的状态。...了解并掌握序列化的基本原理和实现方式,对于任何.NET开发者来说都是非常有价值的。
Maven从源代码构建快速入门输入输出输出输入字节缓冲区不安全的缓冲区可变长度编码分块编码缓冲性能读写对象往返深拷贝和浅拷贝参考引用解析器...和加密实现序列化器序列化器参考嵌套序列化程序Kryo异常堆栈大小接受...
Kryo是一个针对Java的高性能对象图序列化框架,由Esoteric Software开发,其特性包括快速、高效以及自动处理,使得在内存序列化和反序列化过程中能实现卓越的性能。 **Kryo的核心特性** 1. **速度与效率**:Kryo...
- **实现方式**:可以通过实现`Cloneable`接口并重写`clone()`方法来实现浅层复制,而对于深层复制,可以通过序列化和反序列化来实现。 - **案例**:通过编写代码演示如何实现这两种复制方式,并比较它们的区别。 ...
2. **序列化和反序列化**:通过将对象序列化为字节流,然后反序列化为新的对象,可以实现深拷贝。这种方法适用于所有的Java对象,但效率较低,并且需要类实现Serializable接口。 3. **手动复制属性**:程序员可以...
JavaScript中的浅层克隆与深度克隆是两种不同的对象复制方式,它们主要处理对象和数组这类引用类型的数据。这两种克隆方法的区别在于处理对象内部引用值的方式,即对堆内存中对象的复制程度。 1. **浅层克隆**: ...
### 浅层与深度强化学习“漏洞”...综上所述,通过深入分析浅层与深度强化学习中的“漏洞”,我们可以更好地理解其内在机制,并采取有效措施提高模型的安全性和鲁棒性。这对于推动人工智能技术的安全应用具有重要意义。
1. 浅层地热能资源的定义与分类:明确浅层地热能的概念,并根据地热资源的温度、赋存方式等因素对其进行分类。 2. 勘查评价的目的和意义:规范浅层地热能勘查评价的目的,解释进行这项工作的重要性,以及如何正确...
【深度学习吴恩达课程笔记(二)-浅层神经网络、深层神经网络】涵盖了神经网络的基础知识,包括浅层神经网络的构建与反向传播,激活函数的选择,以及深层神经网络的优势。 首先,浅层神经网络的核心是双层神经网络。...
作为机器学习的一种新的尝试,htm算法已经得到了广大学者的追逐与实践,这里通过java来实现htm算法,仅供学习
浅层复制与深层复制 #### 描述 - **浅层复制**仅复制对象的引用,因此复制的对象和原对象共享相同的成员变量。 - **深层复制**则会递归地复制对象及其所有成员变量的副本,创建完全独立的新对象。 - 通过了解这...
这个类专门用于优化DataSet的序列化过程,通过更高效的方式表示DataSet,从而减小数据体积,加快序列化和反序列化速度。使用DataSetSurrogate,可以在不牺牲数据完整性的前提下,大幅度提高数据传输效率。 #### 四...
复制操作可以是浅层的(仅复制文件本身)或是深层的(包括文件的所有属性和权限)。 #### 实现方法 在Windows操作系统中,实现文件或文件夹复制的常用方法之一是利用`CopyFile`函数,这是一个由Windows API提供的...
"文本分类大综述:从浅层到深度学习" 文本分类是自然语言处理中的基本任务之一。过去十年,深度学习的成功使得该领域的研究激增。为了满足全面和更新综述的需要,本综述从1961年到2020年对文本分类的发展进行了回顾...
copy 模块提供了通用的浅层复制 copy() 和深层复制 deepcopy() 操作。 copy() 仅复制对象本身,而不对其中的子对象进行复制,如果对原子对象进行修改,那么浅层复制之后的对象也会随着修改。 deepcopy() 是真正意义...
我们假设,由于浅层 CNN 固有的降维效果相对较低,因此浅层 CNN 能够实现比深层 CNN 更高的准确率,从而能够保留不同病害叶片照片之间的更多区别性特征。我们将自己构建的浅层 CNN 与传统的深层 CNN 的性能进行了...
基于浅层学习的纺织品瑕疵检测算法设计与实现,是一种利用计算机视觉技术来自动化这一过程的方法。本项目提供了一个全面的解决方案,包括理论阐述、算法设计、代码实现以及环境搭建教程,旨在帮助用户理解和应用这种...