java copy array how copy clone an array java
Denne vejledning om kopiering og kloning af arrays diskuterer de forskellige metoder til kopiering af en matrix i Java:
Her vil vi diskutere kopieringen af Java-arrays. Java giver forskellige måder, hvorpå du kan lave kopier af matrixelementer. Som vi ved, kan matrixer i Java indeholde elementer af primitive typer eller objekter eller referencer.
Mens du laver kopier af primitive typer, er opgaven ret let, men når det kommer til objekter eller referencer, skal du være opmærksom på, om kopien er dyb eller lav.
=> Se på Java Beginners Guide her.
Lav kopi laver en kopi af elementet. Det er ikke et problem, når primitive datatyper er involveret. Men når der er tale om referencer, vil en lav kopi bare kopiere værdien og ikke den underliggende information.
Så selvom du har lavet kopier af elementer, vil en ændring i en kopi også afspejle sig i en anden kopi, når hukommelsesplaceringerne deles. For at forhindre dette skal du gå til en dyb kopi, hvor hukommelsesplaceringerne ikke deles.
Hvad du lærer:
Kopier og klon Java-arrays
Java giver dig mulighed for at kopiere arrays ved hjælp af enten direkte kopimetode leveret af java.util eller System class. Det giver også en klonmetode, der bruges til at klone et helt array.
I denne vejledning vil vi diskutere følgende metoder til kopiering og kloning af arrays.
- Manuel kopiering ved hjælp af for loop
- Brug af System.arraycopy ()
- Brug af Arrays.copyOf ()
- Brug af Arrays.copyOfRange ()
- Brug af Object.clone ()
Lad os udforske !!
Manuel kopiering ved hjælp af Loop
Normalt når vi kopierer variabler, for eksempel a og b, udfører vi kopieringen som følger:
a = b;
Det fungerer ikke korrekt, hvis vi anvender den samme metode til arrays.
Lad os se et programmeringseksempel.
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 Produktion:
I ovenstående program er der to arrays, dvs. intArray og copyArray. Opgaven er at kopiere indholdet af intArray til copyArray. For at gøre dette introduceres udsagnet copyArray = intArray. Hvad der gøres her er, at referencerne til arrayet er tildelt. Derfor er dette ikke egentlig kopiering.
Som et resultat af ovenstående udsagn deles hukommelsesplaceringen af intArray også af copyArray. Når copyArray-elementet nu er inkrementeret, afspejles denne ændring også i intArray. Dette vises i output.
For at løse dette problem anvender vi en metode til at kopiere arrayet ved hjælp af for loop. Her kopieres hvert element i det originale array til det nye array ved hjælp af en for-loop.
Dette program er vist nedenfor.
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 Produktion:
Her har vi ændret det forrige program til at omfatte for loop og inside for loop, vi tildeler hvert element af intArray til det tilsvarende element i copyArray. På denne måde kopieres elementerne faktisk. Så når et array ændres, afspejles ændringerne ikke i et andet array.
Brug af System.arraycopy ()
Java's System-klasse har en metode kaldet 'ArrayCOpy', der giver dig mulighed for at kopiere elementer fra et array til et andet array.
Den generelle prototype af denne metode er som følger:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Her,
- src_array => Kildearray, hvorfra indholdet skal kopieres.
- src_Pos => Positionen i kildearrayet, hvorfra kopieringen starter.
- dest_array => Destinationsarray, hvortil elementerne skal kopieres.
- dest_Pos => Startposition i destinationsarrayet for de elementer, der skal kopieres.
- længde => Længden af det array, der skal kopieres.
Lad os forstå denne metode med et eksempel.
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)); } }
Produktion:
I ovenstående program bruger vi 'arraycopy' -metoden til at kopiere en array til en anden array. Du kan se opkaldet til arraycopy-metoden. Vi kopierer kildearrayet fra begyndelsen (0thplacering) og kopier hele matrixen.
Endelig viser vi strengækvivalenten for både kilden såvel som destinationsarrayerne.
Med arraycopy-metoden kan du kopiere endda delvise arrays, da det tager start- og slutelementpositioner som argumenter. Denne metode laver en lav kopi af matrixelementer.
Brug af Arrays.copyOf ()
Metoden Arrays.copyOf () bruger internt System.arraycopy () -metoden. Selvom den ikke er så effektiv som arraycopy, kan den bruges til at kopiere fuld eller delvis array ligesom arraycopy-metoden.
'CopyOf ()' - metoden er en del af java.util-pakken og tilhører klassen 'Arrays'.
Prototypen for denne metode er som følger:
public static int() copyOf(int() original_array,int newLength)
Hvor,
- original: Det array, der skal kopieres til det nye array.
- newLength: Længden af det kopierede array, der skal returneres.
Således laver denne metode en kopi af det array, der er angivet i det første argument til den angivne længde ved at trunke eller polstring af længden med 0 til det nye array. Dette betyder, at hvis længden af det kopierede array er mere end det oprindelige array, erstattes 0s for de resterende elementer.
Programmet nedenfor viser et eksempel på copyOf-metoden.
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)); } }
Produktion:
I ovenstående program kopierer vi even_Array af længde 4 ved hjælp af metoden copyOf. Det andet argument, der leveres, er 5. Derfor har det nye kopierede array 5 elementer i det. De første fire er de samme som den originale matrix, og det femte element er 0, da copyOf padser det, fordi længden af det originale array er mindre end det nye array.
Brug af Arrays.copyOfRange ()
Metoden Arrays.copyOfRange () bruges specifikt, når du vil kopiere delvise arrays. Ligesom copyOf () -metoden bruger denne metode også internt System.arraycopy () -metoden.
Prototypen af Arrays.copyOfRange () -metoden er som følger:
public static short() copyOfRange(short() original, int from, int to)
hvor,
- original: Matrixen, hvorfra et interval skal kopieres.
- fra: Indledende indeks for det interval, der skal kopieres, inklusive.
- til: Det endelige indeks for det område, der skal kopieres, eksklusivt.
Et eksempel på implementering af copyOfRange-metoden er vist nedenfor.
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)); } }
Produktion:
Brug af Object.clone ()
Java-array implementerer internt en klonbar grænseflade, og det er således let at klone et Java-array. Du kan klone endimensionelle såvel som todimensionale arrays. Når du kloner et-dimensionelt array, laver det en dyb kopi af array-elementer, som kopierer værdierne.
På den anden side, når du kloner todimensionale eller flerdimensionale arrays, laves der en lav kopi af elementer, dvs. kun referencer kopieres. Denne kloning af arrays udføres ved hjælp af 'Clone ()' - metoden leveret af arrays.
En dyb kopi af 1-D-arrays som et resultat af kloning kan vises som nedenfor:
Lad os nu implementere 1-D-array-kloning i et Java-program.
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 Som du kan se i udgangen, returnerer udtrykket for at kontrollere for begge arrays ligestilling falsk. Dette skyldes, at kloning af et-dimensionelt array resulterer i dyb kopi, hvor værdierne kopieres til et nyt array og ikke kun referencer.
Ofte stillede spørgsmål
Q # 1) Hvordan laver man en kopi af et array i Java?
Svar: Der er forskellige metoder til at kopiere en matrix.
- Du kan bruge en for-loop og kopiere elementer fra en til en anden en efter en.
- Brug klonmetoden til at klone en matrix.
- Brug arraycopy () -metoden i systemklassen.
- Brug copyOf () eller copyOfRange () i Arrays-klassen.
Q # 2) Hvordan tildeler du et array til et andet?
Svar: Du kan tildele array til en anden ved hjælp af en simpel tildelingsoperator (=). Du skal sikre dig, at de to arrays er af samme datatype og har en identisk dimension.
Q # 3) Hvad er en lav kopi og dyb kopi?
Svar: I lav kopi kopieres kun attributterne for objekter eller arrays. Så ændringer i det kopierede array afspejles i originalen. Java-kloning er et eksempel på en lav kopi.
hvad er stadierne i sdlc
En dyb kopi er den, hvor vi har brug for en komplet kopi af objektet, så når vi kloner eller kopierer objektet, er det en uafhængig kopi. Når primitive eller indbyggede typer er involveret, er der ingen forskel mellem den lave og dybe kopi.
Spørgsmål nr. 4) Hvad gør en Array Clone?
Svar: Kloningsmetoden for arrays bruges til at kopiere attributterne for et objekt til et andet. Det bruger en lav kopi til at gøre dette.
Spørgsmål nr. 5) Kan du gemme en matrix i en matrix?
Svar: Arrays kan indeholde arrays forsynet med de elementer, der er af samme type (primitiv eller objekt). Dette betyder, at du ikke kan gemme et heltal array i en streng array.
Konklusion
I denne vejledning udforskede vi kopi array og klon arrays i Java. Vi har set forskellige metoder / tilgange til at kopiere og klone en matrix.
Bemærk, at de fleste af disse metoder implementerer en lav kopi. For primitive datatyper er overfladisk og dyb kopi ikke forskellig. Men når en matrix indeholder objekter eller referencer, skal programmøren implementere en dyb kopi i henhold til kravene.
I vores efterfølgende tutorials fortsætter vi med at udforske mere om Java-arrays.
=> Læs gennem Easy Java Training Series.
Anbefalet læsning
- Java Array Length Tutorial med kodeeksempler
- Java Generic Array - Sådan simuleres generiske arrays i Java?
- Java Array - Hvordan udskrives elementer af en matrix i Java?
- Flerdimensionelle arrays i Java (2d og 3d arrays i Java)
- Sådan videregives / returneres en matrix i Java
- Sådan sorteres en matrix i Java - vejledning med eksempler
- Java Array - Erklære, oprette og initialisere en matrix i Java
- Fjern / slet et element fra en matrix i Java