ava中集合的深层拷贝具体实现
时间: 2024-02-28 22:52:04 浏览: 112
在 Java 中,如果需要实现集合的深层拷贝,可以通过以下两种方式:
1. 使用序列化和反序列化实现深拷贝
可以将集合对象序列化到一个流中,然后再从流中反序列化出一个新的集合对象,这样就可以得到一个完全独立的新集合对象。具体实现代码如下:
```java
import java.io.*;
public class DeepCopy {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// 创建一个需要进行深拷贝的集合对象
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
// 将集合对象序列化到一个流中
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(list);
// 从流中反序列化出一个新的集合对象
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
List<String> newList = (List<String>) ois.readObject();
// 验证新集合对象与原集合对象是否相同
System.out.println("原集合对象:" + list);
System.out.println("新集合对象:" + newList);
System.out.println("原集合对象与新集合对象是否相同:" + (list == newList));
}
}
```
2. 使用递归实现深拷贝
可以通过递归遍历集合中的每个元素,如果元素是一个集合对象,则递归调用该方法进行深拷贝。具体实现代码如下:
```java
import java.util.*;
public class DeepCopy {
public static void main(String[] args) {
// 创建一个需要进行深拷贝的集合对象
List<Object> list = new ArrayList<>();
list.add("Java");
list.add(Arrays.asList("Python", "C++"));
// 深拷贝集合对象
List<Object> newList = deepCopy(list);
// 验证新集合对象与原集合对象是否相同
System.out.println("原集合对象:" + list);
System.out.println("新集合对象:" + newList);
System.out.println("原集合对象与新集合对象是否相同:" + (list == newList));
}
public static List<Object> deepCopy(List<Object> list) {
List<Object> newList = new ArrayList<>();
for (Object obj : list) {
if (obj instanceof List) {
newList.add(deepCopy((List<Object>) obj));
} else {
newList.add(obj);
}
}
return newList;
}
}
```
阅读全文