Junior — Middle
Kuo skiriasi visiško objekto dubliavimas nuo paviršiaus kopijavimo proceso?
sobes.tech AI
Atsakymas iš AI
Visas objekto kopijavimas (deep copy) ir paviršutinis kopijavimas (shallow copy) skiriasi įklijuotų objektų kopijavimo lygiu:
-
Paviršutinis kopijavimas sukuria naują objektą, tačiau laukai, kurie yra nuorodos į kitus objektus, kopijuojami kaip nuorodos. Kitaip tariant, įklijuoti objektai nėra kopijuojami, o dalijamasi jais tarp originalo ir kopijos.
-
Gilus kopijavimas sukuria naują objektą ir rekursyviai kopijuoja visus įklijuotus objektus, sukurdami visiškai nepriklausomą kopiją.
Pavyzdys Java kalba:
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;
}
// Paviršutinis kopijavimas
public Person shallowCopy() throws CloneNotSupportedException {
return (Person) this.clone();
}
// Gilus kopijavimas
public Person deepCopy() {
List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
return new Person(this.name, hobbiesCopy);
}
}
Šiame pavyzdyje, paviršutiniame kopijavime, hobbies sąrašas bus dalijamasi tarp originalo ir kopijos, o gilus kopijavimas sukurs naują sąrašą.