java copy array how copy clone an array java
Denne veiledningen om kopiering og kloning av matriser diskuterer de forskjellige metodene for å kopiere en matrise i Java:
Her vil vi diskutere kopieringen av Java-arrays. Java gir forskjellige måter du kan lage kopier av matriseelementer på. Som vi vet, kan Java i matriser inneholde elementer av primitive typer eller objekter eller referanser.
Mens du lager kopier av primitive typer, er oppgaven ganske enkel, men når det gjelder objekter eller referanser, må du være oppmerksom på om kopien er dyp eller grunne.
=> Ta en titt på Java Beginners Guide her.
Grunn kopi lager en kopi av elementet. Det er ikke et problem når primitive datatyper er involvert. Men når referanser er involvert, vil en grunne kopi bare kopiere verdien og ikke den underliggende informasjonen.
Dermed, selv om du har laget kopier av elementer, vil en endring i en kopi også gjenspeiles i en annen kopi når minneplasseringene deles. For å forhindre dette, må du gå for en dyp kopi der minneplasseringene ikke deles.
Hva du vil lære:
Kopier og klon Java-arrays
Java lar deg kopiere matriser med enten direkte kopimetode levert av java.util eller System class. Det gir også en klonmetode som brukes til å klone en hel matrise.
I denne opplæringen vil vi diskutere følgende metoder for kopiering og kloning av matriser.
- Manuell kopiering ved hjelp av for loop
- Bruke System.arraycopy ()
- Bruke Arrays.copyOf ()
- Bruke Arrays.copyOfRange ()
- Bruke Object.clone ()
La oss utforske !!
Manuell kopiering med For Loop
Normalt når vi kopierer variabler, for eksempel a og b, utfører vi kopieringen slik:
a = b;
Det kommer ikke til å fungere riktig hvis vi bruker samme metode på matriser.
La oss 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 Produksjon:
I programmet ovenfor er det to matriser, dvs. intArray og copyArray. Oppgaven er å kopiere innholdet i intArray til copyArray. For å gjøre dette introduseres uttalelsen copyArray = intArray. Det som gjøres her er at referansene til matrisen er tildelt. Derfor er dette ikke faktisk kopiering.
Som et resultat av utsagnet ovenfor deles minneplasseringen til intArray også av copyArray. Nå når copyArray-elementet økes, gjenspeiles den endringen også i intArray. Dette vises i utgangen.
For å løse dette problemet bruker vi en metode for å kopiere matrisen ved hjelp av for loop. Her kopieres hvert element i den opprinnelige matrisen til den nye matrisen ved hjelp av en for loop.
Dette programmet 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 Produksjon:
Her har vi endret forrige program for å inkludere for loop og inside for loop, vi tilordner hvert element av intArray til det tilsvarende elementet i copyArray. På denne måten blir elementene faktisk kopiert. Så når en matrise er modifisert, gjenspeiles ikke endringene i en annen matrise.
Bruke System.arraycopy ()
Java's System-klasse har en metode kalt 'ArrayCOpy' som lar deg kopiere elementer fra en matrise til en annen matrise.
Den generelle prototypen til denne metoden 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 innholdet skal kopieres.
- src_Pos => Plasseringen i kildearrayet der kopieringen starter.
- dest_array => Destinasjonsmatrise som elementene skal kopieres til.
- dest_Pos => Startposisjon i destinasjonsmatrisen for elementene som skal kopieres.
- lengde => Lengden på matrisen som skal kopieres.
La oss forstå denne metoden 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)); } }
Produksjon:
I programmet ovenfor bruker vi 'arraycopy' -metoden for å kopiere en matrise til en annen matrise. Du kan se anropet til arraycopy-metoden. Vi kopierer kildearrisen fra begynnelsen (0thsted) og kopier hele matrisen.
Til slutt viser vi strengekvivalenten til både kilden så vel som destinasjonsarrayene.
Med arraycopy-metoden kan du kopiere til og med delvise arrays ettersom det tar start- og sluttelementposisjonene som argumenter. Denne metoden lager en grunne kopi av matriseelementer.
Bruke Arrays.copyOf ()
Metoden Arrays.copyOf () bruker internt metoden System.arraycopy (). Selv om den ikke er like effektiv som arraykopi, kan den brukes til å kopiere hel eller delvis matrise akkurat som arraykopimetoden.
‘CopyOf ()’ -metoden er en del av java.util-pakken og tilhører klassen “Arrays”.
Prototypen til denne metoden er som følger:
public static int() copyOf(int() original_array,int newLength)
Hvor,
- opprinnelig: Matrisen som skal kopieres til den nye matrisen.
- newLength: Lengden på den kopierte matrisen som skal returneres.
Dermed lager denne metoden en kopi av matrisen som er gitt i det første argumentet til den angitte lengden ved å trunke eller polstrere lengden med 0 til den nye matrisen. Dette betyr at hvis lengden på den kopierte matrisen er mer enn den opprinnelige matrisen, erstattes 0s for de gjenværende elementene.
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)); } }
Produksjon:
I programmet ovenfor kopierer vi even_Array av lengde 4 ved å bruke metoden copyOf. Det andre argumentet som er gitt er 5. Derfor har den nye kopierte matrisen 5 elementer i seg. De fire første er de samme som den opprinnelige matrisen, og det femte elementet er 0 som copyOf pads fordi lengden på den opprinnelige matrisen er mindre enn den for den nye matrisen.
Bruke Arrays.copyOfRange ()
Metoden Arrays.copyOfRange () brukes spesielt når du vil kopiere delmatriser. I likhet med copyOf () -metoden, bruker denne metoden også internt System.arraycopy () -metoden.
Prototypen til Arrays.copyOfRange () -metoden er som følger:
public static short() copyOfRange(short() original, int from, int to)
hvor,
- opprinnelig: Matrisen som et område skal kopieres fra.
- fra: Innledende indeks for området som skal kopieres, inkludert.
- til: Den endelige indeksen for området som skal kopieres, eksklusiv.
Et eksempel på implementering av 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)); } }
Produksjon:
Bruke Object.clone ()
Java-array implementerer internt et klonabelt grensesnitt, og det er dermed enkelt å klone et Java-array. Du kan klone endimensjonale så vel som todimensjonale matriser. Når du kloner endimensjonalt array, lager det en dyp kopi av arrayelementer som kopierer verdiene.
På den annen side, når du kloner todimensjonale eller flerdimensjonale matriser, blir det laget en grunne kopi av elementer, dvs. bare referanser kopieres. Denne kloningen av arrays gjøres ved hjelp av 'Clone ()' - metoden som tilbys av arrays.
En dyp kopi av 1-D matriser som et resultat av kloning kan vises som nedenfor:
La oss nå 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 utdataene, returnerer uttrykket for å sjekke om begge matriser er like. Dette er fordi kloning av en-dimensjonal matrise resulterer i dyp kopi hvor verdiene kopieres til en ny matrise og ikke bare referanser.
ofte stilte spørsmål
Q # 1) Hvordan lage en kopi av en matrise i Java?
Svar: Det er forskjellige metoder for å kopiere en matrise.
- Du kan bruke en for loop og kopiere elementer fra en til en annen.
- Bruk klonmetoden til å klone en matrise.
- Bruk arraycopy () -metoden i systemklassen.
- Bruk copyOf () eller copyOfRange () i Arrays-klassen.
Q # 2) Hvordan tilordner du en matrise til en annen?
Svar: Du kan tilordne matrisen til en annen ved hjelp av en enkel tildelingsoperator (=). Du må sørge for at de to matriser er av samme datatype og har en identisk dimensjon.
Q # 3) Hva er en grunne kopi og dyp kopi?
Svar: I grunne kopier blir bare attributtene til aktuelle objekter eller matriser kopiert. Så eventuelle endringer i den kopierte matrisen gjenspeiles i originalen. Java-kloning er et eksempel på en grunne kopi.
hva er den beste gratis e-postkontoen
En dyp kopi er den hvor vi trenger en komplett kopi av objektet, slik at når vi kloner eller kopierer det objektet, er det en uavhengig kopi. Når primitive eller innebygde typer er involvert, er det ingen forskjell mellom den grunne og dype kopien.
Q # 4) Hva gjør en Array Clone?
Svar: Kloningsmetoden for matriser brukes til å kopiere attributtene til ett objekt til et annet. Den bruker en grunne kopi for å gjøre dette.
Sp # 5) Kan du lagre en serie i en serie?
Svar: Arrays kan inneholde arrays forsynt med elementene som er av samme type (primitiv eller objekt). Dette betyr at du ikke kan lagre et heltallmatrise i en strengmatrise.
Konklusjon
I denne opplæringen utforsket vi kopierings- og klonarrayer i Java. Vi har sett forskjellige metoder / tilnærminger for å kopiere og klone en matrise.
Merk at de fleste av disse metodene implementerer en grunne kopi. For primitive datatyper er ikke grunne og dype kopier forskjellige. Men når en matrise inneholder objekter eller referanser, må programmereren implementere en dyp kopi i henhold til kravene.
I de påfølgende veiledningene fortsetter vi å utforske mer om Java-arrays.
=> Les gjennom Easy Java Training Series.
Anbefalt lesing
- Java Array Length Tutorial With Code Eksempler
- Java Generic Array - Hvordan simulere generiske matriser i Java?
- Java Array - Hvordan skrive ut elementer av en array i Java?
- Flerdimensjonale matriser i Java (2d og 3d matriser i Java)
- Hvordan sende / returnere en matrise i Java
- Hvordan sortere en matrise i Java - Veiledning med eksempler
- Java Array - Erklære, opprette og initialisere en array i Java
- Fjern / slett et element fra en matrise i Java