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