Sobes.tech
Junior — Middle

Kuo skiriasi visiško objekto dubliavimas nuo paviršiaus kopijavimo proceso?

sobes.tech AI

Atsakymas iš AI

Visas objekto kopijavimas (deep copy) ir paviršutinis kopijavimas (shallow copy) skiriasi įklijuotų objektų kopijavimo lygiu:

  • Paviršutinis kopijavimas sukuria naują objektą, tačiau laukai, kurie yra nuorodos į kitus objektus, kopijuojami kaip nuorodos. Kitaip tariant, įklijuoti objektai nėra kopijuojami, o dalijamasi jais tarp originalo ir kopijos.

  • Gilus kopijavimas sukuria naują objektą ir rekursyviai kopijuoja visus įklijuotus objektus, sukurdami visiškai nepriklausomą kopiją.

Pavyzdys Java kalba:

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

    // Paviršutinis kopijavimas
    public Person shallowCopy() throws CloneNotSupportedException {
        return (Person) this.clone();
    }

    // Gilus kopijavimas
    public Person deepCopy() {
        List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
        return new Person(this.name, hobbiesCopy);
    }
}

Šiame pavyzdyje, paviršutiniame kopijavime, hobbies sąrašas bus dalijamasi tarp originalo ir kopijos, o gilus kopijavimas sukurs naują sąrašą.