java copy array how copy clone an array java
Ovaj vodič za kopiranje i kloniranje nizova razmatra različite metode kopiranja niza u Javi:
Ovdje ćemo razgovarati o kopiranju Java nizova. Java nudi razne načine na koje možete kopirati elemente niza. Kao što znamo, u Javi nizovi mogu sadržavati elemente primitivnih tipova ili objekata ili referenci.
Tijekom izrade kopija primitivnih tipova zadatak je prilično jednostavan, ali što se tiče predmeta ili referenci, morate obratiti pažnju je li kopija duboka ili plitka.
=> Ovdje pogledajte Vodič za početnike za Java.
Plitka kopija pravi kopiju elementa. Nije problem kada su u pitanju primitivni tipovi podataka. Ali kada su u pitanju reference, plitka kopija samo će kopirati vrijednost, a ne osnovne podatke.
Stoga, iako ste napravili kopije elemenata, promjena u jednoj kopiji odražit će se i na drugoj kopiji jer se dijele memorijska mjesta. Da biste to spriječili, morate potražiti dubinsku kopiju u kojoj se memorijske lokacije ne dijele.
Što ćete naučiti:
Kopirajte i klonirajte Java nizove
Java vam omogućuje kopiranje nizova pomoću metode izravnog kopiranja koju pruža java.util ili klasa System. Također pruža metodu kloniranja koja se koristi za kloniranje cijelog niza.
U ovom uputstvu razmotrit ćemo sljedeće metode kopiranja i kloniranja nizova.
- Ručno kopiranje pomoću for petlje
- Korištenje System.arraycopy ()
- Korištenje Arrays.copyOf ()
- Korištenje Arrays.copyOfRange ()
- Korištenje Object.clone ()
Istražimo !!
Ručno kopiranje pomoću funkcije Loop
Uobičajeno kada kopiramo varijable, na primjer, a i b, izvodimo operaciju kopiranja na sljedeći način:
a = b;
Neće raditi ispravno ako primijenimo istu metodu na nizove.
Pogledajmo primjer programiranja.
public class Main { public static void main(String[] args) { int intArray[] = {12,15,17}; //print original intArray System.out.println('Contents of intArray[] before assignment:'); for (int i=0; i Izlaz:
U gornjem programu postoje dva polja, tj. IntArray i copyArray. Zadatak je kopiranje sadržaja intArray u copyArray. Da biste to učinili, uvodi se izjava copyArray = intArray. Ovdje se radi na dodjeli referenci niza. Stoga ovo nije stvarno kopiranje.
Kao rezultat gore navedene izjave, memorijsko mjesto intArray dijeli i copyArray. Sada, kada se element copyArray povećava, ta se promjena odražava i na intArray. To je prikazano u izlazu.
Da bismo prevladali ovaj problem, koristimo metodu kopiranja niza pomoću petlje for. Ovdje se svaki element izvornog polja kopira u novi niz pomoću petlje for.
Ovaj program je prikazan u nastavku.
public class Main { public static void main(String[] args) { int intArray[] = {12,15, 17}; // define an array copyArray to copy contents of intArray int copyArray[] = new int[intArray.length]; // copy contents of intArray to copyArray for (int i=0; i Izlaz:
Ovdje smo izmijenili prethodni program tako da uključuje for loop i unutar for loop, svaki element intArray dodjeljujemo odgovarajućem elementu copyArray. Na taj se način elementi zapravo kopiraju. Dakle, kada se jedan niz modificira, promjene se ne odražavaju u drugom nizu.
Korištenje System.arraycopy ()
Javina klasa System ima metodu koja se naziva 'ArrayCOpy' koja vam omogućuje kopiranje elemenata jednog polja u drugi niz.
Opći prototip ove metode je sljedeći:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Ovdje,
- src_array => Izvorni niz odakle će se sadržaj kopirati.
- src_Pos => Položaj u izvornom nizu odakle započinje kopiranje.
- dest_array => Odredišni niz u koji se elementi kopiraju.
- dest_Pos => Početni položaj u odredišnom nizu za elemente koji se kopiraju.
- duljina => Duljina niza za kopiranje.
Razumijemo ovu metodu na primjeru.
class Main { public static void main(String[] args) { //declaring a source array char[] src_array = { 'S','o','f','t','w','a','r','e','T','e','s','t','i','n','g','H','e','l','p'}; char[] dest_array = new char[19]; System.arraycopy(src_array, 0, dest_array, 0,19); System.out.println('Source array:' + String.valueOf(src_array)); System.out.println('Destination array after arraycopy:'+ String.valueOf(dest_array)); } }
Izlaz:
U gornjem programu koristimo metodu ‘arraycopy’ za kopiranje niza u drugi niz. Možete vidjeti poziv metode arraycopy. Izvorni niz kopiramo od početka (0thlocation) i kopirajte cijeli niz.
I na kraju, prikazujemo ekvivalent niza izvornog i odredišnog niza.
Metodom arraycopy možete kopirati čak i djelomične nizove jer za početak uzimaju argumente početni i krajnji element. Ova metoda izrađuje plitku kopiju elemenata niza.
Korištenje Arrays.copyOf ()
Metoda Arrays.copyOf () interno koristi metodu System.arraycopy (). Iako nije toliko učinkovit kao arraycopy, može se koristiti za kopiranje cijelog ili djelomičnog niza baš kao i metoda arraycopy.
Metoda ‘copyOf ()’ dio je paketa java.util i pripada klasi “Arrays”.
Prototip ove metode je sljedeći:
public static int[] copyOf(int[] original_array,int newLength)
Gdje,
- izvornik: Niz koji se kopira u novi niz.
- newLength: Duljina kopirane matrice koja se vraća.
Dakle, ova metoda izrađuje kopiju niza navedenog u prvom argumentu na navedenu duljinu skraćivanjem ili dodavanjem duljine s 0 na novi niz. To znači da ako je duljina kopiranog niza veća od izvornog polja, 0s se zamjenjuju za preostale elemente.
U nastavku dan program prikazuje primjer metode copyOf.
importjava.util.Arrays; public class Main { public static void main(String args[]) { // define original array int[] even_Array = new int[] {2,4,6,8}; System.out.println('Original Array:' + Arrays.toString(even_Array)); // copying array even_Array to copy_Array int[] copy_Array = Arrays.copyOf(even_Array,5); System.out.println('Copied Array:' + Arrays.toString(copy_Array)); // assign value to unassigned element of copied array copy_Array[4] = 10; System.out.println('Copied and modified Array:' + Arrays.toString(copy_Array)); } }
Izlaz:
U gore navedenom programu kopiramo even_Array duljine 4 metodom copyOf. Drugi navedeni argument je 5. Dakle, novi kopirani niz sadrži 5 elemenata. Prva četiri su ista kao izvorni niz, a peti element je 0 jer ga copyOf postavlja jer je duljina izvornog polja manja od duljine novog polja.
Korištenje Arrays.copyOfRange ()
Metoda Arrays.copyOfRange () posebno se koristi kada želite kopirati djelomične nizove. Poput metode copyOf (), i ova metoda interno koristi metodu System.arraycopy ().
Prototip metode Arrays.copyOfRange () je sljedeći:
public static short[] copyOfRange(short[] original, int from, int to)
gdje,
- izvornik: Niz iz kojeg se kopira raspon.
- iz: Inicijalni indeks raspona za kopiranje, uključujući.
- do: Konačni indeks raspona koji se kopira, ekskluzivan.
Primjer implementacije metode copyOfRange prikazan je u nastavku.
import java.util.Arrays; class Main { public static void main(String args[]) { int intArray[] = { 10,20,30,40,50 }; // to index is within the range int[] copyArray = Arrays.copyOfRange(intArray, 2, 6); System.out.println('Array copy with both index within the range: ' + Arrays.toString(copyArray)); //to index is out of range int[] copy1 = Arrays.copyOfRange(intArray, 4, intArray.length + 3); System.out.println('Array copy with to index out of range: ' + Arrays.toString(copy1)); } }
Izlaz:
Korištenje Object.clone ()
Java niz interno implementira Cloneable sučelje i stoga je lako klonirati Java niz. Možete klonirati jednodimenzionalne kao i dvodimenzionalne nizove. Kada klonirate jednodimenzionalni niz, on pravi dubinsku kopiju elemenata niza koji kopira vrijednosti.
S druge strane, kada klonirate dvodimenzionalne ili višedimenzionalne nizove, napravi se plitka kopija elemenata, tj. Kopiraju se samo reference. Ovo kloniranje nizova vrši se metodom ‘Clone ()’ koju pružaju nizovi.
Dubinska kopija 1-D niza kao rezultat kloniranja može se predstaviti na sljedeći način:
Ajmo sada implementirati 1-D kloniranje niza u Java programu.
class Main { public static void main(String args[]) { int num_Array[] = {5,10,15,20,25,30}; int clone_Array[] = num_Array.clone(); System.out.println('Original num_Array:'); for (int i = 0; i Kao što možete vidjeti u izlazu, izraz za provjeru jednakosti oba polja vraća false. To je zato što kloniranje jednodimenzionalnog niza rezultira dubinskim kopiranjem pri čemu se vrijednosti kopiraju u novi niz, a ne samo na reference.
Često postavljana pitanja
P # 1) Kako napraviti kopiju niza u Javi?
Odgovor: Postoje različite metode kopiranja niza.
- Možete koristiti for petlju i jedan po jedan kopirati elemente jednog u drugi.
- Koristite metodu kloniranja za kloniranje niza.
- Upotrijebite metodu arraycopy () klase System.
- Upotrijebite metode copyOf () ili copyOfRange () klase Arrays.
P # 2) Kako dodijeliti jedan niz drugom?
Odgovor: Niz možete dodijeliti drugom pomoću jednostavnog operatora dodjele (=). Morate osigurati da su dva polja istog tipa podataka i imaju identičnu dimenziju.
P # 3) Što je plitka kopija i duboka kopija?
Odgovor: U plitkoj kopiji kopiraju se samo atributi predmetnih objekata ili nizova. Tako će se sve promjene kopiranog polja odražavati u izvorniku. Java kloniranje je primjer plitke kopije.
koja je svrha testiranja prihvaćanja korisnika
Dubinska kopija je ona u kojoj nam je potrebna cjelovita kopija objekta, tako da kada kloniramo ili kopiramo taj objekt, to bude neovisna kopija. Kada su u pitanju primitivni ili ugrađeni tipovi, nema razlike između plitke i duboke kopije.
P # 4) Što radi Array Clone?
Odgovor: Metoda kloniranja nizova koristi se za kopiranje atributa jednog objekta u drugi. Za to koristi plitku kopiju.
P # 5) Možete li pohraniti niz u niz?
Odgovor: Nizovi mogu sadržavati nizove s elementima istog tipa (primitivni ili objektni). To znači da ne možete pohraniti cjelobrojni niz u niz nizova.
Zaključak
U ovom uputstvu istražili smo niz kopiranja i kloniranje polja u Javi. Vidjeli smo razne metode / pristupe za kopiranje i kloniranje niza.
Imajte na umu da većina ovih metoda implementira plitku kopiju. Za primitivne vrste podataka, plitka i duboka kopija se ne razlikuju. Ali kada niz sadrži objekte ili reference, programer mora implementirati dubinsku kopiju prema zahtjevima.
U našim sljedećim vodičima nastavljamo istraživati više o Java nizovima.
=> Pročitajte seriju Easy Training Training.
Preporučena literatura
- Vodič o dužini Java polja s primjerima koda
- Java generički niz - kako simulirati generičke nizove u Javi?
- Java Array - Kako ispisati elemente niza u Javi?
- Multidimenzionalni nizovi u Javi (2d i 3d nizovi u Javi)
- Kako proslijediti / vratiti niz u Javi
- Kako sortirati niz u Javi - Vodič sa primjerima
- Java Array - Deklariranje, stvaranje i inicijalizacija niza u Javi
- Ukloni / izbriši element iz niza u Javi