Ποια είναι η διαφορά μεταξύ της διαδικασίας πλήρους διπλασιασμού ενός αντικειμένου και της επιφανειακής αντιγραφής του;
sobes.tech AI
Απάντηση από AI
Ο πλήρης διπλασιασμός ενός αντικειμένου (deep copy) και η επιφανειακή αντιγραφή (shallow copy) διαφέρουν στο επίπεδο αντιγραφής των εμφωλευμένων αντικειμένων:
-
Επιφανειακή αντιγραφή δημιουργεί ένα νέο αντικείμενο, αλλά τα πεδία που είναι αναφορές σε άλλα αντικείμενα αντιγράφονται ως αναφορές. Δηλαδή, τα εμφωλευμένα αντικείμενα δεν διπλασιάζονται, αλλά μοιράζονται μεταξύ του αρχικού και του αντιγράφου.
-
Πλήρης διπλασιασμός δημιουργεί ένα νέο αντικείμενο και αντιγράφει αναδρομικά όλα τα εμφωλευμένα αντικείμενα, δημιουργώντας ένα πλήρως ανεξάρτητο αντίγραφο.
Παράδειγμα σε Java:
import java.util.ArrayList;
import java.util.List;
class Person implements Cloneable {
String name;
List<String> hobbies;
public Person(String name, List<String> hobbies) {
this.name = name;
this.hobbies = hobbies;
}
// Επιφανειακή αντιγραφή
public Person shallowCopy() throws CloneNotSupportedException {
return (Person) this.clone();
}
// Πλήρης διπλασιασμός
public Person deepCopy() {
List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
return new Person(this.name, hobbiesCopy);
}
}
Σε αυτό το παράδειγμα, στην επιφανειακή αντιγραφή, η λίστα hobbies θα μοιράζεται μεταξύ του αρχικού και του αντιγράφου, ενώ στην βαθιά αντιγραφή, θα δημιουργηθεί μια νέα λίστα.