LinkedList 深拷贝
时间: 2024-06-18 21:04:00 浏览: 181
在Java中,LinkedList是一种实现了List接口的链表数据结构,它可以动态增长和缩短,比较适合用于需要频繁插入、删除操作的场景。如果我们需要对一个LinkedList进行拷贝,有两种方式:浅拷贝和深拷贝。
浅拷贝只是拷贝了原链表中节点的引用,而不是节点本身,因此,如果修改了拷贝后的链表,原链表也会受到影响。在Java中,可以使用LinkedList的clone()方法进行浅拷贝。
深拷贝则是将原链表中节点的复制品插入到新的链表中,因此新链表与原链表互不干扰。在Java中,可以通过序列化(serialization)和反序列化(deserialization)实现深拷贝。具体步骤如下:
1. 将原链表序列化成一个字节数组。
2. 将字节数组反序列化成一个新的链表。
下面是一个示例代码:
```
import java.io.*;
public class DeepCopyLinkedList implements Serializable {
public static void main(String[] args) throws IOException, ClassNotFoundException {
LinkedList<String> originalList = new LinkedList<>();
originalList.add("A");
originalList.add("B");
originalList.add("C");
// deep copy
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(originalList);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
LinkedList<String> newList = (LinkedList<String>) ois.readObject();
System.out.println("Original List: " + originalList);
System.out.println("New List: " + newList);
}
}
```
需要注意的是,LinkedList中存储的元素也必须支持序列化,否则在进行序列化和反序列化时会报错。
阅读全文