Sobes.tech
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.