java中俩个list 深拷贝
时间: 2024-04-27 07:15:46 浏览: 145
在Java中实现两个List的深拷贝可以通过以下方法:
1. 使用序列化和反序列化:
```java
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class DeepCopyExample {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("item1");
list1.add("item2");
// 深拷贝list1
List<String> list2 = deepCopy(list1);
// 修改list1的第一个元素
list1.set(0, "modified");
// 输出list1和list2的内容
System.out.println("list1: " + list1); // 输出:list1: [modified, item2]
System.out.println("list2: " + list2); // 输出:list2: [item1, item2]
}
public static <T extends Serializable> List<T> deepCopy(List<T> source) {
try {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(source);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
List<T> copy = (List<T>) in.readObject();
return copy;
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
}
```
2. 使用循环遍历和创建新的对象:
```java
import java.util.ArrayList;
import java.util.List;
public class DeepCopyExample {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("item1");
list1.add("item2");
// 深拷贝list1
List<String> list2 = deepCopy(list1);
// 修改list1的第一个元素
list1.set(0, "modified");
// 输出list1和list2的内容
System.out.println("list1: " + list1); // 输出:list1: [modified, item2]
System.out.println("list2: " + list2); // 输出:list2: [item1, item2]
}
public static <T> List<T> deepCopy(List<T> source) {
List<T> copy = new ArrayList<>();
for (T item : source) {
if (item instanceof Cloneable) {
try {
T clonedItem = (T) item.getClass().getMethod("clone").invoke(item);
copy.add(clonedItem);
} catch (Exception e) {
e.printStackTrace();
}
} else {
copy.add(item);
}
}
return copy;
}
}
```
阅读全文