Sobes.tech
Junior — Middle

Mi a különbség a teljes példányosítási folyamat és a felületi másolás között?

sobes.tech MI

Válasz az MI-től

Egy objektum teljes másolata (mély másolat) és a felületes másolat (shallow copy) különböznek a beágyazott objektumok másolási szintjében:

  • Felületes másolat létrehoz egy új objektumot, de azok a mezők, amelyek más objektumokra mutató hivatkozások, hivatkozásként másolódnak. Más szóval, a beágyazott objektumok nem duplikálódnak, hanem megosztódnak az eredeti és a másolat között.

  • Mélységi másolat létrehoz egy új objektumot, és rekurzívan másolja az összes beágyazott objektumot, teljesen független másolatot hozva létre.

Java példában:

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;
    }

    // Felületes másolat
    public Person shallowCopy() throws CloneNotSupportedException {
        return (Person) this.clone();
    }

    // Mélységi másolat
    public Person deepCopy() {
        List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
        return new Person(this.name, hobbiesCopy);
    }
}

Ebben a példában, a felületes másolatnál a hobbies lista megosztott az eredetivel és a másolattal, míg a mély másolatnál új lista jön létre.