Junior — Middle
V čom spočíva rozdiel medzi procesom úplného duplikovania objektu a jeho povrchovým kopírovaním?
sobes.tech AI
Odpoveď od AI
Úplné duplikovanie objektu (deep copy) a povrchné kopírovanie (shallow copy) sa líšia úrovňou kopírovania vnorených objektov:
-
Povrchné kopírovanie vytvorí nový objekt, ale polia, ktoré sú referenciami na iné objekty, sa kopírujú ako referencie. Inými slovami, vnorené objekty sa nekopírujú, ale zdieľajú medzi originálom a kópiou.
-
Hlboké duplikovanie vytvorí nový objekt a rekurzívne skopíruje všetky vnorené objekty, čím vytvorí úplne nezávislú kópiu.
Príklad v Jave:
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;
}
// Povrchné kopírovanie
public Person shallowCopy() throws CloneNotSupportedException {
return (Person) this.clone();
}
// Hlboké duplikovanie
public Person deepCopy() {
List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
return new Person(this.name, hobbiesCopy);
}
}
V tomto príklade bude zoznam hobbies pri povrchnom kopírovaní zdieľaný medzi originálom a kópiou, zatiaľ čo pri hlbokom kopírovaní bude vytvorený nový zoznam.