如何实现序列化接口的对象集合的深拷贝操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计336个文字,预计阅读时间需要2分钟。
在Java中,对可变对象的深拷贝是处理对象复制时的常见需求。深拷贝确保复制出的对象与原对象在内存中是完全独立的,即修改一个对象不会影响到另一个。以下是一个简化版的深拷贝方法实现,使用了序列化和反序列化技术:
javaimport java.io.*;import java.util.ArrayList;import java.util.List;
public class DeepCopyUtil {
public static List deepCopy(List src) throws IOException, ClassNotFoundException { // 使用ByteArrayOutputStream和ObjectOutputStream进行序列化 ByteArrayOutputStream bos=new ByteArrayOutputStream(); ObjectOutputStream oos=new ObjectOutputStream(bos); oos.writeObject(src);
// 使用ByteArrayInputStream和ObjectInputStream进行反序列化 ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois=new ObjectInputStream(bis);
// 返回反序列化后的对象 return (List) ois.readObject(); }
// 测试方法 public static void main(String[] args) { try { List originalList=new ArrayList(); originalList.add(Item1); originalList.add(Item2); originalList.add(Item3);
List copiedList=deepCopy(originalList);
// 打印结果以验证深拷贝是否成功 System.out.println(Original List: + originalList); System.out.println(Copied List: + copiedList); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }}
众所周知,java里要做到对可变对象的深拷贝是麻烦的,因为你总是引用的地址,下面这一段是一个利用序列化流实现的对象集合的深拷贝public static
本文共计336个文字,预计阅读时间需要2分钟。
在Java中,对可变对象的深拷贝是处理对象复制时的常见需求。深拷贝确保复制出的对象与原对象在内存中是完全独立的,即修改一个对象不会影响到另一个。以下是一个简化版的深拷贝方法实现,使用了序列化和反序列化技术:
javaimport java.io.*;import java.util.ArrayList;import java.util.List;
public class DeepCopyUtil {
public static List deepCopy(List src) throws IOException, ClassNotFoundException { // 使用ByteArrayOutputStream和ObjectOutputStream进行序列化 ByteArrayOutputStream bos=new ByteArrayOutputStream(); ObjectOutputStream oos=new ObjectOutputStream(bos); oos.writeObject(src);
// 使用ByteArrayInputStream和ObjectInputStream进行反序列化 ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois=new ObjectInputStream(bis);
// 返回反序列化后的对象 return (List) ois.readObject(); }
// 测试方法 public static void main(String[] args) { try { List originalList=new ArrayList(); originalList.add(Item1); originalList.add(Item2); originalList.add(Item3);
List copiedList=deepCopy(originalList);
// 打印结果以验证深拷贝是否成功 System.out.println(Original List: + originalList); System.out.println(Copied List: + copiedList); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }}
众所周知,java里要做到对可变对象的深拷贝是麻烦的,因为你总是引用的地址,下面这一段是一个利用序列化流实现的对象集合的深拷贝public static

