java copy array how copy clone an array java
Tento návod na kopírovanie a klonovanie polí pojednáva o rôznych metódach kopírovania poľa v prostredí Java:
Tu budeme diskutovať o operácii kopírovania polí Java. Java poskytuje rôzne spôsoby, ako môžete vytvárať kópie prvkov poľa. Ako vieme, v Jave môžu polia obsahovať prvky primitívnych typov alebo objekty alebo odkazy.
Pri vytváraní kópií primitívnych typov je úloha pomerne ľahká, ale pokiaľ ide o objekty alebo odkazy, musíte venovať pozornosť tomu, či je kópia hlboká alebo plytká.
=> Tu si pozrite príručku Java Beginners Guide.
Plytká kópia vytvorí kópiu prvku. Nie je problém, keď ide o primitívne dátové typy. Ale keď sú zahrnuté odkazy, plytká kópia iba skopíruje hodnotu a nie základné informácie.
Aj keď ste teda vytvorili kópie prvkov, zmena v jednej kópii sa prejaví aj v druhej kópii, pretože sa zdieľajú miesta v pamäti. Aby ste tomu zabránili, musíte vyhľadať hĺbkovú kópiu, v ktorej nie sú zdieľané miesta v pamäti.
Čo sa dozviete:
Kopírovanie a klonovanie polí Java
Java umožňuje kopírovať polia buď pomocou metódy priameho kopírovania, ktorú poskytuje java.util, alebo triedy System. Poskytuje tiež metódu klonovania, ktorá sa používa na klonovanie celého poľa.
V tomto výučbe sa budeme zaoberať nasledujúcimi metódami kopírovania a klonovania polí.
- Ručné kopírovanie pomocou cyklu for
- Používanie System.arraycopy ()
- Používanie Arrays.copyOf ()
- Používanie Arrays.copyOfRange ()
- Používanie Object.clone ()
Poďme preskúmať !!
Ručné kopírovanie pomocou slučky
Normálne, keď kopírujeme premenné, napríklad a a b, vykonáme operáciu kopírovania nasledovne:
a = b;
Ak použijeme tú istú metódu na polia, nebude to fungovať správne.
Pozrime sa na príklad programovania.
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 Výkon:

Vo vyššie uvedenom programe sú dve polia, tj. IntArray a copyArray. Úlohou je skopírovať obsah intArray do copyArray. Za týmto účelom je zavedený príkaz copyArray = intArray. Čo sa tu robí, sú priradené referencie poľa. Toto teda nie je skutočné kopírovanie.
Výsledkom vyššie uvedeného tvrdenia je, že pamäťové umiestnenie intArray zdieľa aj copyArray. Keď sa teraz zvýši prvok copyArray, táto zmena sa prejaví aj v intArray. Toto sa zobrazuje na výstupe.
Na prekonanie tohto problému používame metódu kopírovania poľa pomocou cyklu for. Tu sa každý prvok pôvodného poľa skopíruje do nového poľa pomocou slučky for.
Tento program je uvedený nižšie.
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 Výkon:

Tu sme upravili predchádzajúci program tak, aby obsahoval cykly for a inside for, každému prvku intArray priradíme zodpovedajúci prvok copyArray. Týmto spôsobom sa prvky skutočne skopírujú. Takže keď je jedno pole upravené, zmeny sa neodrazia v inom poli.
Používanie System.arraycopy ()
Trieda Java v systéme má metódu nazvanú „ArrayCOpy“, ktorá umožňuje kopírovať prvky jedného poľa do druhého.
Všeobecný prototyp tejto metódy je nasledovný:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Tu,
- src_array => Zdrojové pole, z ktorého sa má kopírovať obsah.
- src_Pos => Pozícia v zdrojovom poli, odkiaľ sa začne kopírovanie.
- dest_array => Cieľové pole, do ktorého sa majú kopírovať prvky.
- dest_Pos => Počiatočná pozícia v cieľovom poli pre prvky, ktoré sa majú kopírovať.
- dĺžka => Dĺžka poľa, ktoré sa má kopírovať.
Poďme túto metódu pochopiť na príklade.
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)); } }
Výkon:

Vo vyššie uvedenom programe používame na kopírovanie poľa do iného poľa metódu ‘arraycopy’. Môžete vidieť volanie metódy arraycopy. Skopírujeme zdrojové pole od začiatku (0thumiestnenie) a skopírujte celé pole.
Na záver zobrazíme reťazcový ekvivalent zdrojového aj cieľového poľa.
Pomocou metódy arraycopy môžete kopírovať aj čiastočné polia, pretože ako argumenty berie pozíciu začiatočného a koncového prvku. Táto metóda vytvára plytkú kópiu prvkov poľa.
Používanie Arrays.copyOf ()
Metóda Arrays.copyOf () interne využíva metódu System.arraycopy (). Aj keď to nie je také efektívne ako arraycopy, dá sa použiť na kopírovanie celého alebo čiastočného poľa rovnako ako metóda arraycopy.
Metóda „copyOf ()“ je súčasťou balíka java.util a patrí do triedy „Arrays“.
Prototyp tejto metódy je nasledovný:
public static int() copyOf(int() original_array,int newLength)
Kde,
- originál: Pole, ktoré sa má skopírovať do nového poľa.
- novýDĺžka: Dĺžka kopírovaného poľa, ktorá sa má vrátiť.
Táto metóda teda vytvorí kópiu poľa poskytnutého v prvom argumente na zadanú dĺžku skrátením alebo polstrovaním dĺžky číslom 0 do nového poľa. To znamená, že ak je dĺžka kopírovaného poľa väčšia ako pôvodné pole, pre zvyšné prvky sa nahradí 0s.
Program uvedený nižšie ukazuje príklad metódy 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)); } }
Výkon:

Vo vyššie uvedenom programe kopírujeme even_Array dĺžky 4 pomocou metódy copyOf. Druhý poskytnutý argument je 5. Preto má nové skopírované pole 5 prvkov. Prvé štyri sú rovnaké ako pôvodné pole a piaty prvok je 0, pretože copyOf ho vyplní, pretože dĺžka pôvodného poľa je menšia ako dĺžka nového poľa.
Používanie Arrays.copyOfRange ()
Metóda Arrays.copyOfRange () sa konkrétne používa, ak chcete kopírovať čiastkové polia. Rovnako ako metóda copyOf (), aj táto metóda interne využíva metódu System.arraycopy ().
Prototyp metódy Arrays.copyOfRange () je nasledovný:
public static short() copyOfRange(short() original, int from, int to)
kde,
- originál: Pole, z ktorého sa má kopírovať rozsah.
- od: Počiatočný index rozsahu, ktorý sa má kopírovať, vrátane.
- do: Konečný index rozsahu, ktorý sa má kopírovať, je exkluzívny.
Nižšie je uvedená príklad implementácie metódy copyOfRange.
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)); } }
Výkon:

Používanie Object.clone ()
Pole Java interne implementuje rozhranie Cloneable, takže je ľahké klonovať pole Java. Môžete klonovať jednorozmerné aj dvojrozmerné polia. Keď klonujete jednorozmerné pole, vytvorí sa hlboká kópia prvkov poľa, ktorá kopíruje hodnoty.
Na druhej strane, keď naklonujete dvojrozmerné alebo viacrozmerné polia, vytvorí sa plytká kópia prvkov, t. J. Kopírujú sa iba odkazy. Toto klonovanie polí sa vykonáva metódou „Clone ()“ poskytnutou poľami.
Hlbokú kópiu 1-D polí v dôsledku klonovania je možné znázorniť nižšie:

Teraz implementujme klonovanie 1-D poľa do programu Java.
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 Ako vidíte na výstupe, výraz na kontrolu rovnosti oboch polí vráti hodnotu false. Je to tak preto, že klonovanie jednorozmerného poľa vedie k hlbokému kopírovaniu, pričom hodnoty sa kopírujú do nového poľa a nielen do odkazov.
často kladené otázky
Otázka č. 1) Ako vytvoriť kópiu poľa v Jave?
Odpoveď: Existujú rôzne spôsoby kopírovania poľa.
- Môžete použiť slučku for a kopírovať prvky jedného do druhého jeden po druhom.
- Na naklonovanie poľa použite metódu klonovania.
- Použite metódu arraycopy () triedy System.
- Použite metódy copyOf () alebo copyOfRange () triedy Arrays.
Otázka 2) Ako môžete priradiť jedno pole k druhému?
Odpoveď: Pole môžete priradiť k inému pomocou jednoduchého operátora priradenia (=). Musíte sa ubezpečiť, že obe polia sú rovnakého dátového typu a majú rovnakú dimenziu.
Otázka č. 3) Čo je to plytká a hlboká kópia?
Odpoveď: V plytkej kópii sa kopírujú iba atribúty predmetných objektov alebo polí. Akékoľvek zmeny kopírovaného poľa sa teda prejavia v origináli. Klonovanie Java je príkladom plytkej kópie.
najlepšie aplikácie na špehovanie niekoho
Hlboká kópia je tá, v ktorej potrebujeme úplnú kópiu objektu, aby sme pri klonovaní alebo kopírovaní tohto objektu boli nezávislou kópiou. Pokiaľ ide o primitívne alebo vstavané typy, nie je rozdiel medzi plytkou a hlbokou kópiou.
Otázka č. 4) Čo robí klon poľa?
Odpoveď: Metóda klonovania polí sa používa na kopírovanie atribútov jedného objektu do druhého. Používa na to plytkú kópiu.
Otázka č. 5) Môžete uložiť pole do poľa?
Odpoveď: Polia môžu obsahovať polia opatrené prvkami rovnakého typu (primitívne alebo objektové). To znamená, že nemôžete uložiť celé číslo do reťazcového poľa.
Záver
V tomto tutoriáli sme preskúmali pole kopírovacích a klonovaných polí v Jave. Videli sme rôzne metódy / prístupy na kopírovanie a klonovanie poľa.
Všimnite si, že väčšina z týchto metód implementuje plytkú kópiu. Pre primitívne dátové typy sa plytká a hlboká kópia nelíšia. Ak ale pole obsahuje objekty alebo odkazy, musí programátor implementovať hĺbkovú kópiu podľa požiadaviek.
V našich ďalších tutoriáloch pokračujeme v skúmaní ďalších informácií o poliach Java.
=> Prečítajte si sériu Easy Java Training Series.
Odporúčané čítanie
- Výukový program Java Array Length s príkladmi kódu
- Generické pole Java - Ako simulovať generické polia v prostredí Java?
- Java Array - Ako tlačiť prvky poľa v Jave?
- MultiDimensional Arrays In Java (2D a 3D Arrays In Java)
- Ako odovzdať / vrátiť pole v Jave
- Ako zoradiť pole v Jave - návod s príkladmi
- Java Array - Deklarovať, vytvoriť a inicializovať pole v Jave
- Odstrániť / Odstrániť prvok z poľa v Jave