Paano Ipapatupad ang Mababaw na Kopya at Malalim na Kopya sa Java



Magbibigay sa iyo ang artikulong ito ng isang detalyado at komprehensibong kaalaman ng Mababaw na Kopya at Malalim na Kopya sa Java na may Mga Halimbawa.

Ang cloning ay isang proseso ng paglikha ng isang kopya o kopya ng object, clone method na Java.lang.Object ay ginagamit upang lumikha ng kopya o replica ng isang bagay. Ang mga object ng java na nagpapatupad ng Cloneable interface ay karapat-dapat para sa paggamit ng clone na pamamaraan. Sa artikulong ito, tatalakayin namin ang Mababaw na Kopya at Malalim na Kopya sa sumusunod na pagkakasunud-sunod:

Lumilikha ng Kopya ng Java Object

Maaari kaming lumikha ng isang kopya o kopya ng java object sa pamamagitan ng





1. Lumilikha ng isang kopya ng bagay sa ibang lokasyon ng memorya. Ito ay tinatawag na isang malalim na kopya.

2. Lumilikha ng isang bagong sanggunian na tumuturo sa parehong lokasyon ng memorya. Tinatawag din itong isang Mababaw na kopya.



Mababaw na Kopya

Ang default na pagpapatupad ng clone na pamamaraan ay lumilikha ng isang mababaw na kopya ng pinagmulang object, nangangahulugan ito na ang isang bagong halimbawa ng uri ng Bagay ay nilikha, kinopya nito ang lahat ng mga patlang sa isang bagong halimbawa at nagbabalik ng isang bagong object ng uri ng 'Bagay'. Ang Bagay na ito ay malinaw na kailangang mai-type sa uri ng object ng pinagmulang object.

Ang bagay na ito ay magkakaroon ng eksaktong kopya ng lahat ng mga patlang ng mapagkukunang object kabilang ang primitive na uri at mga sanggunian ng object. Kung ang pinagmulan ng bagay ay naglalaman ng anumang mga sanggunian sa iba pang mga bagay sa patlang pagkatapos sa bagong halimbawa ay may mga sanggunian lamang sa mga bagay na iyon, isang kopya ng mga bagay na iyon ay hindi nilikha. Nangangahulugan ito kung gumawa kami ng mga pagbabago sa mababaw na kopya pagkatapos ay masasalamin ang mga pagbabago sa pinagmulang object. Ang parehong mga pagkakataon ay hindi malaya.

Ang pamamaraan ng clone sa Object class ay protektado sa likas na katangian, kaya't hindi lahat ng mga klase ay maaaring gumamit ng clone () na pamamaraan. Kailangan mong ipatupad ang Cloneable interface at i-override ang clone na pamamaraan. Kung ang Cloneable interface ay hindi ipinatupad pagkatapos ay makakakuha ka ng CloneNotSupportedException.super.clone () ay magbabalik ng mababaw na kopya ayon sa pagpapatupad sa Object class.



Code para sa Mababaw na Kopya

package com.test class Department {String empId String grade String designation public Department (String empId, String grade, String designation) {this.empId = empId this.grade = grade this.designation = designation}} klase Ang empleyado ay nagpapatupad ng Cloneable {int id Pangalan ng string Kagawaran dept pampublikong empleyado (int id, String name, Department dept) {this.id = id this.name = name this.dept = dept} // Default na bersyon ng clone () na pamamaraan. Lumilikha ito ng mababaw na kopya ng isang bagay. protektadong Object clone () nagtatapon ng CloneNotSupportedException {return super.clone ()}} public class na ShallowCopyInJava {public static void main (String [] args) {Department dept1 = bagong Kagawaran ('1', 'A', 'AVP') empleyado emp1 = bagong Empleyado (111, 'John', dept1) Empleyado emp2 = null try {// Paglikha ng isang clone ng emp1 at pagtatalaga nito sa emp2 emp2 = (Empleyado) emp1.clone ()} catch (CloneNotSupportedException e) {e. printStackTrace ()} // Pag-print ng pagtatalaga ng 'emp1' System.out.println (emp1.dept.designation) // Output: AVP // Pagbabago ng pagtatalaga ng 'emp2' emp2.dept.designation = 'Director' // Ang pagbabago na ito ay makikita sa orihinal na Empley 'emp1' System.out.println (emp1.dept.designation) // Output: Director}}

Output:

sertipikadong developer ng cloudera para sa apache hadoop

Output-Shallow-Copy

Sa halimbawa sa itaas, mayroon kaming isang emp1 na klase ng empleyado na mayroong tatlong class variable id (int), pangalan (String) at departamento (Kagawaran).

Na-clone namin ngayon ang emp1 sa emp2 upang lumikha ng isang mababaw na kopya, pagkatapos nito ay binago namin ang pagtatalaga gamit ang emp2 na bagay at napatunayan na ang parehong mga pagbabago ay nakalarawan din sa emp1 din.


Malalim na Kopya

Ang malalim na kopya ng isang bagay ay magkakaroon ng eksaktong kopya ng lahat ng mga patlang ng mapagkukunang object tulad ng isang mababaw na kopya, ngunit hindi katulad ng sallow copy kung ang pinagmulang object ay may anumang sanggunian sa object bilang mga patlang, kung gayon ang isang kopya ng object ay nilikha sa pamamagitan ng pagtawag sa clone paraan Nangangahulugan ito na ang parehong mga mapagkukunan at patutunguhan na bagay ay malaya sa bawat isa. Anumang pagbabago na ginawa sa na-clone na bagay ay hindi makakaapekto sa pinagmulang object.

Code para sa Malalim na Kopya

pakete com.test class Kagawaran nagpapatupad ng Cloneable {String empId String grade String designation public Department (String empId, String grade, String designation) {this.empId = empId this.grade = grade this.designation = designation} // Default na bersyon ng clone () paraan. protektado ng Object clone () nagtatapon ng CloneNotSupportedException {return super.clone ()}} klase ng empleyado na nagpapatupad ng Cloneable {int id String name Department dept public Empleyado (int id, String name, Department dept) {this.id = id this.name = name this.dept = dept} // Overriding clone () na pamamaraan upang lumikha ng isang malalim na kopya ng isang bagay. protektado ng Object clone () nagtatapon ng CloneNotSupportedException {Empleyo emp = (empleyado) super.clone () emp.dept = (Kagawaran) dept.clone () ibalik ang emp}} pampublikong klase ng DeepCopyInJava {public static void main (String [] args) { Kagawaran dept1 = bagong Kagawaran ('1', 'A', 'AVP') Empleyado emp1 = bagong empleyado (111, 'John', dept1) Empleyado emp2 = null try {// Lumilikha ng isang clone ng emp1 at italaga ito sa emp2 emp2 = (Empleyado) emp1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Pagpi-print ng pagtatalaga ng 'emp1' System.out.println (emp1.dept.designation) // Output: AVP / / Pagbabago ng pagtatalaga ng 'emp2' emp2.dept.designation = 'Director' // Ang pagbabago na ito ay makikita sa orihinal na Empley 'emp1' System.out.println (emp1.dept.designation) // Output: AVP}}

Output:

Sa halimbawa sa itaas ng Malalim na kopya, hindi katulad ng mababaw na kopya, ang parehong mga mapagkukunan at patutunguhang bagay ay independiyente sa bawat isa. Anumang pagbabago na ginawa sa emp2 ay hindi makakaapekto sa emp1.

Pagkakaiba sa Pagitan ng Mababaw na Kopya at Malalim na Kopya

Mababaw na Kopya Malalim na Kopya
Ang na-clone na object at pinagmulang object ay hindi ganap na naalis ang pagkakahiwalayAng mga na-clone na bagay at pinagmulan ng bagay ay ganap na independiyente sa bawat isa.
Ang mga pagbabagong ginawa sa cloned instance ay makakaapekto sa variable ng sanggunian ng pinagmulang objectAng mga pagbabagong ginawa sa cloned instance ay hindi makakaapekto sa variable na sanggunian ng pinagmulang object.
Ang default na bersyon ng clone ay ang mababaw na kopyaUpang lumikha ng malalim na kopya kailangan naming i-override ang clone na paraan ng Object class.
Mas gusto ang mababaw na kopya kung ang mga variable ng klase ng bagay ay paunang uri lamang bilang mga patlangMas gusto ang isang malalim na kopya kung ang mga variable ng klase ng object ay may mga sanggunian sa iba pang mga bagay bilang mga patlang.
Ito ay medyo mabilisMedyo mabagal ito.

Sa pamamagitan nito, nakarating kami sa dulo ng artikulo ng Mababaw na Kopya at Malalim na Kopya. Inaasahan kong nakakuha ka ng pag-unawa sa iba't ibang mga pagkakaiba sa pagitan ng dalawa.

Suriin ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang kurso sa pagsasanay at sertipikasyon ng Java J2EE at SOA ng Edureka ay idinisenyo para sa mga mag-aaral at propesyonal na nais na maging isang Java Developer.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng blog na 'Mababaw na Kopya at Malalim na Kopya' at babalikan ka namin sa lalong madaling panahon.