生成深拷贝与浅拷贝的java代码,并注释
时间: 2024-10-11 15:06:15 浏览: 38
在Java中,深拷贝和浅拷贝用于复制对象,它们的主要区别在于对对象内部结构的处理方式。以下是浅拷贝和深拷贝的简单例子:
**浅拷贝 (Shallow Copy):**
```java
import java.util.ArrayList;
import java.util.List;
public class ShallowCopyExample {
private List<String> list = new ArrayList<>();
// 添加元素到原始列表
public void addElement(String element) {
list.add(element);
}
// 创建浅拷贝的方法
public List<String> shallowCopy() {
// 创建一个新的list对象,引用的是原list的第一个元素
return new ArrayList<>(list); // 这是一个引用类型的浅复制
}
public static void main(String[] args) {
ShallowCopyExample original = new ShallowCopyExample();
original.addElement("A");
original.addElement("B");
ShallowCopyExample copy = original.shallowCopy();
// 修改原列表
original.addElement("C");
System.out.println("Original list: " + original.list); // [A, B, C]
System.out.println("Copied list: " + copy.list); // [A, B]
}
}
```
**深拷贝 (Deep Copy):**
```java
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
// 定义Serializable接口用于序列化和反序列化操作
class DeepCopyExample implements Serializable {
private List<String> list = new ArrayList<>();
// 同样添加元素
// 创建深拷贝的方法,这里我们使用序列化反序列化实现深拷贝
public DeepCopyExample deepCopy() throws Exception {
// 序列化原对象
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(this);
// 反序列化得到新的对象
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
return (DeepCopyExample) objectInputStream.readObject();
}
public static void main(String[] args) throws Exception {
DeepCopyExample original = new DeepCopyExample();
original.addElement("A");
original.addElement("B");
DeepCopyExample copy = original.deepCopy();
// 修改原列表
original.addElement("C");
System.out.println("Original list: " + original.list); // [A, B, C]
System.out.println("Copied list: " + copy.list); // [A, B] - 没有改变,因为这是两个独立的对象
}
}
```
阅读全文