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 სია იქნება გაზიარებული ორიგინალთან და კოპიასთან, ხოლო სიღრმისეულ კოპიაში, ახალი სია შეიქმნება.