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的方式)中有,这里就不重复了
分享到:
相关推荐
Kryo 还可以自动执行深层和浅层复制/克隆。这是从对象到对象的直接复制,而不是从对象到字节再到对象的复制。本文档适用于 Kryo 版本 5.x。请参阅4.x 版本的Wiki 。联系方式/邮件列表请使用Kryo 邮件列表来提问、...
- **实现方式**:可以通过实现`Cloneable`接口并重写`clone()`方法来实现浅层复制,而对于深层复制,可以通过序列化和反序列化来实现。 - **案例**:通过编写代码演示如何实现这两种复制方式,并比较它们的区别。 ...
浅层复制与深层复制 #### 描述 - **浅层复制**仅复制对象的引用,因此复制的对象和原对象共享相同的成员变量。 - **深层复制**则会递归地复制对象及其所有成员变量的副本,创建完全独立的新对象。 - 通过了解这...
- 对于大型或复杂的对象,性能开销较大,因为需要序列化和反序列化整个对象。 - JSON不支持函数、undefined、循环引用等类型,这些在转换过程中会被丢失或忽略。 3. **浅层复制:Object.assign()** `Object....
Kryo还可以执行自动的深层和浅层复制/克隆。 这是从对象到对象的直接复制,而不是从对象到字节的复制。 联系人/邮件列表 请使用获取问题,讨论和支持。 请将Kryo问题追踪器的使用限制为错误和增强功能,而不是问题...
深度学习是人工智能的一个重要分支,它的核心在于构建深层的神经网络模型,模仿人脑的复杂结构和功能,以实现从原始数据中自动学习和提取高级抽象特征。这种技术使得计算机能够处理非结构化数据,如图像、声音和文本...