Junior
Čo vieš o povrchovom kopírovaní?
sobes.tech AI
Odpoveď od AI
Povrchové kopírovanie (shallow copy) vytvára novú kópiu objektu, ale nekopíruje objekty, na ktoré sa odkazujú polia pôvodného objektu. Skôr sa kopírujú samotné odkazy.
Charakteristiky:
- Zmeny v mutovateľných objektoch, na ktoré sa odkazujú kópie, budú viditeľné v pôvodnom objekte a naopak.
- Je rýchlejšie ako hlboké kopírovanie pre objekty s množstvom odkazov.
Implementuje sa napríklad metódou clone() (ak objekt implementuje Cloneable) alebo manuálne.
Príklad clone():
// Vytvárame triedu s mutovateľným poľom
class Address {
String city;
public Address(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address{" +
"city='" + city + '\'' +
'}';
}
}
// Vytvárame triedu s odkazom na Address, implementujeme Cloneable
class Person implements Cloneable {
String name;
Address address;
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
// Implementujeme povrchové kopírovanie pomocou Object.clone()
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address=" + address +
'}';
}
}
// Príklad použitia
public class ShallowCopyExample {
public static void main(String[] args) throws CloneNotSupportedException {
Address originalAddress = new Address("New York");
Person originalPerson = new Person("Alice", originalAddress);
// Povrchové kopírovanie
Person copiedPerson = (Person) originalPerson.clone();
System.out.println("Original Person: " + originalPerson);
System.out.println("Copied Person: " + copiedPerson);
// Meníme mutovateľné pole v pôvodnom objekte...
originalAddress.city = "Los Angeles";
// ...zmeny sú viditeľné aj v kópii, pretože odkazujú na ten istý objekt Address
System.out.println("\nAfter modifying original address:");
System.out.println("Original Person: " + originalPerson);
System.out.println("Copied Person: " + copiedPerson);
}
}
Používa sa, keď nie je potrebné úplné duplikovanie celej hierarchie objektov alebo keď sú vložené objekty immutable.