Junior — Middle
Milline on täieliku objekti dubleerimise protsessi ja selle pinnakopimise vahe?
sobes.tech AI
Vastus AI-lt
Objekti täielik koopia (deep copy) ja pindmine koopia (shallow copy) erinevad sisestatud objektide koopiate tasemel:
-
Pindmine koopia loob uue objekti, kuid väljad, mis on viited teistele objektidele, kopeeritakse viidetena. Teisisõnu, sisemised objektid ei kopeerita, vaid jagatakse originaali ja koopiaga.
-
Sügav koopia loob uue objekti ja rekursiivselt kopeerib kõik sisemised objektid, luues täielikult sõltumatu koopia.
Näide Java keeles:
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;
}
// Pindmine koopia
public Person shallowCopy() throws CloneNotSupportedException {
return (Person) this.clone();
}
// Sügav koopia
public Person deepCopy() {
List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
return new Person(this.name, hobbiesCopy);
}
}
Selles näites jagatakse pindmise koopia puhul hobbies nimekiri originaali ja koopiaga, samas kui sügava koopia puhul luuakse uus nimekiri.