Junior — Middle
Ի՞նչն է տարբերվում օբյեկտի ամբողջական կրկնօրինակումից և նրա մակերեսային պատճենից։
sobes.tech AI
Պատասխան AI-ից
Ամբողջական կրկնօրինակում (deep copy) և մակերեսային պատճենը (shallow copy) տարբեր են ներսում գտնվող օբյեկտների կրկնօրինման մակարդակով:
-
Մակերեսային պատճեն ստեղծում է նոր օբյեկտ, բայց այն դաշտերը, որոնք հղումներ են այլ օբյեկտների, պատճենվում են որպես հղումներ։ Այսինքն, ներսի օբյեկտները չեն կրկնօրինվում, այլ բաժանվում են սկզբնաղբյուրի և պատճենի միջև:
-
Ամբողջական կրկնօրինակում ստեղծում է նոր օբյեկտ և ռեկուրսիվ կերպով պատճենում բոլոր ներսի օբյեկտները, ստեղծելով լիովին անկախ պատճեն:
Java-ի օրինակ՝
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;
}
// Մակերեսային պատճեն
public Person shallowCopy() throws CloneNotSupportedException {
return (Person) this.clone();
}
// Ամբողջական կրկնօրինակում
public Person deepCopy() {
List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
return new Person(this.name, hobbiesCopy);
}
}
Այս օրինակով, մակերեսային պատճենում, hobbies ցանկը կիսվում է սկզբնաղբյուրի և պատճենի միջև, իսկ խորքային պատճենում՝ ստեղծվում է նոր ցանկ։