Junior — Middle
Kāda ir atšķirība starp pilnīgas objekta dublēšanas procesu un tā virsmas kopēšanu?
sobes.tech AI
Atbilde no AI
Pilnīga objekta dublēšana (deep copy) un virsmas kopēšana (shallow copy) atšķiras pēc iekšējo objektu kopēšanas līmeņa:
-
Virsmas kopēšana izveido jaunu objektu, bet lauki, kas ir atsauces uz citiem objektiem, tiek kopēti kā atsauces. Citiem vārdiem sakot, iekšējie objekti netiek dublēti, bet dalās starp oriģinālu un kopiju.
-
Pilna dublēšana izveido jaunu objektu un rekursīvi kopē visus iekšējos objektus, radot pilnīgi neatkarīgu kopiju.
Java piemērs:
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;
}
// Virsmas kopēšana
public Person shallowCopy() throws CloneNotSupportedException {
return (Person) this.clone();
}
// Pilna kopēšana
public Person deepCopy() {
List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
return new Person(this.name, hobbiesCopy);
}
}
Šajā piemērā, virsmas kopijā, hobbies saraksts tiks dalīts starp oriģinālu un kopiju, bet dziļajā kopijā tiks izveidots jauns saraksts.