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.