1. Shallow Copy
Định nghĩa:
Shallow copy là việc sao chép một object, nhưng các thuộc tính kiểu object bên trong không được sao chép độc lập mà chỉ sao chép tham chiếu (reference).
→ Bản gốc và bản sao cùng dùng chung các object con bên trong.
Ví dụ:
class Person {
String name;
}
class Group {
Person leader;
}
Group group1 = new Group();
group1.leader = new Person();
group1.leader.name = "Alice";
// Shallow copy: chỉ sao chép tham chiếu
Group group2 = group1;
group2.leader.name = "Bob";
// Kết quả:
System.out.println(group1.leader.name); // Bob → bị ảnh hưởng
2. Deep Copy
Định nghĩa:
Deep copy là việc sao chép một object và cả các object con bên trong.
→ Tạo bản sao hoàn toàn độc lập với bản gốc.
Ví dụ:
class Person {
String name;
public Person(String name) {
this.name = name;
}
public Person clone() {
return new Person(this.name); // tạo object mới
}
}
class Group {
Person leader;
public Group(Person leader) {
this.leader = leader;
}
public Group deepCopy() {
return new Group(this.leader.clone());
}
}
// Dùng:
Group group1 = new Group(new Person("Alice"));
Group group2 = group1.deepCopy();
group2.leader.name = "Bob";
// Kết quả:
System.out.println(group1.leader.name); // Alice → không bị ảnh hưởng
3. Shallow Copy Và Deep Copy
Shallow Copy | Deep Copy |
---|---|
Tạo một đối tượng mới nhưng sao chép các tham chiếu của các trường của đối tượng gốc. | Tạo một đối tượng mới và sao chép đệ quy tất cả các trường, bao gồm các đối tượng lồng nhau. |
Tham chiếu các đối tượng lồng nhau từ đối tượng gốc, do đó các thay đổi đối với các đối tượng lồng nhau sẽ ảnh hưởng đến cả đối tượng gốc và bản sao. | Sao chép hoàn toàn các đối tượng lồng nhau, do đó các thay đổi trong một đối tượng không ảnh hưởng đến đối tượng kia. |
Nó tiết kiệm bộ nhớ hơn vì nó chia sẻ các tham chiếu đến các đối tượng hiện có. | Nó tiêu tốn nhiều bộ nhớ hơn vì nó sao chép tất cả các đối tượng và các đối tượng lồng nhau của chúng. |
Nó nhanh hơn vì nó chỉ sao chép các tham chiếu. | Nó chậm hơn vì nó cần sao chép tất cả các cấu trúc lồng nhau theo cách đệ quy. |
Be First to Comment