java copy array how copy clone an array java
Denna handledning om kopiering och kloning av matriser diskuterar olika metoder för att kopiera en matris i Java:
Här kommer vi att diskutera kopieringen av Java-matriser. Java tillhandahåller olika sätt på vilka du kan göra kopior av arrayelement. Som vi vet kan matriser i Java innehålla element antingen av primitiva typer eller objekt eller referenser.
När du gör kopior av primitiva typer är uppgiften ganska enkel men när det gäller objekt eller referenser måste du vara uppmärksam på om kopian är djup eller grunt.
=> Ta en titt på Java-nybörjarguiden här.
Grunn kopia gör en kopia av elementet. Det är inte ett problem när primitiva datatyper är inblandade. Men när referenser är inblandade kommer en grund kopia bara att kopiera värdet och inte den underliggande informationen.
Så även om du har gjort kopior av element, kommer en ändring i en kopia att återspeglas i en annan kopia också när minnesplatserna delas. För att förhindra detta måste du gå till en djup kopia där minnesplatserna inte delas.
Vad du kommer att lära dig:
Kopiera och klona Java Arrays
Java låter dig kopiera matriser med antingen direktkopieringsmetod som tillhandahålls av java.util eller Systemklass. Det ger också en klonmetod som används för att klona en hel array.
I denna handledning kommer vi att diskutera följande metoder för kopiering och kloning av matriser.
- Manuell kopiering med hjälp av for loop
- Använda System.arraycopy ()
- Använda Arrays.copyOf ()
- Använda Arrays.copyOfRange ()
- Använda Object.clone ()
Låt oss utforska !!
Manuell kopiering med hjälp av för loop
Normalt när vi kopierar variabler, till exempel a och b, utför vi kopieringen enligt följande:
a = b;
Det kommer inte att fungera korrekt om vi använder samma metod för matriser.
Låt oss se ett programmeringsexempel.
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 ovanstående program finns det två matriser, dvs. intArray och copyArray. Uppgiften är att kopiera innehållet i intArray till copyArray. För att göra detta införs uttalandet copyArray = intArray. Vad som görs här är att referenserna till matrisen tilldelas. Därför är detta inte egentlig kopiering.
Som ett resultat av ovanstående uttalande delas minnesplatsen för intArray också av copyArray. När copyArray-elementet nu ökas återspeglas den förändringen också i intArray. Detta visas i utgången.
För att övervinna detta problem använder vi en metod för att kopiera matrisen med hjälp av för loop. Här kopieras varje element i den ursprungliga matrisen till den nya matrisen med hjälp av en for-loop.
Detta program visas nedan.
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:
Här har vi modifierat det tidigare programmet för att inkludera för loop och insida för loop, vi tilldelar varje element av intArray till motsvarande element av copyArray. På detta sätt kopieras elementen faktiskt. Så när en array ändras återspeglas inte ändringarna i en annan array.
Använda System.arraycopy ()
Java: s systemklass har en metod som kallas 'ArrayCOpy' som låter dig kopiera element i en array till en annan array.
Den allmänna prototypen för denna metod är som följer:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Här,
- src_array => Källmatris från vilket innehållet ska kopieras.
- src_Pos => Positionen i källmatrisen från vilken kopieringen startar.
- dest_array => Destinationsmatris till vilka element som ska kopieras.
- dest_Pos => Startposition i destinationsmatrisen för de element som ska kopieras.
- längd => Längden på den array som ska kopieras.
Låt oss förstå den här metoden med ett exempel.
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 programmet ovan använder vi metoden 'arraycopy' för att kopiera en array till en annan array. Du kan se anropet till arraycopy-metoden. Vi kopierar källmatrisen från början (0thplats) och kopiera hela matrisen.
Slutligen visar vi strängekvivalenten för både källan och destinationsmatriserna.
Med arraycopy-metoden kan du kopiera till och med partiella matriser eftersom det tar start- och slutelementpositionerna som argument. Denna metod gör en grunt kopia av arrayelement.
Använda Arrays.copyOf ()
Metoden Arrays.copyOf () använder internt metoden System.arraycopy (). Även om den inte är lika effektiv som arraycopy, kan den användas för att kopiera hel eller partiell array precis som arraycopy-metoden.
'CopyOf ()' -metoden är en del av paketet java.util och tillhör klassen 'Arrays'.
Prototypen för denna metod är som följer:
public static int[] copyOf(int[] original_array,int newLength)
Var,
- original: Matrisen som ska kopieras till den nya matrisen.
- newLength: Längden på den kopierade matrisen som ska returneras.
Således gör denna metod en kopia av matrisen som tillhandahålls i det första argumentet till den angivna längden genom att trunka eller stoppa längden med 0 till den nya matrisen. Det betyder att om längden på den kopierade matrisen är mer än den ursprungliga matrisen, ersätts 0s för de återstående elementen.
Programmet nedan visar ett exempel 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 programmet ovan kopierar vi even_Array av längd 4 med hjälp av metoden copyOf. Det andra argumentet som tillhandahålls är 5. Därför har den nya kopierade matrisen 5 element i sig. De första fyra är samma som den ursprungliga matrisen och det femte elementet är 0 som copyOf-kuddar eftersom längden på den ursprungliga matrisen är mindre än för den nya matrisen.
Använda Arrays.copyOfRange ()
Metoden Arrays.copyOfRange () används specifikt när du vill kopiera partiella matriser. Liksom copyOf () -metoden använder den här metoden även internt System.arraycopy () -metoden.
Prototypen för metoden Arrays.copyOfRange () är som följer:
public static short[] copyOfRange(short[] original, int from, int to)
var,
- original: Matrisen från vilken ett intervall ska kopieras.
- från: Initialt index för det intervall som ska kopieras, inklusive.
- till: Det slutliga indexet för det intervall som ska kopieras, exklusivt.
Ett exempel på implementering av metoden copyOfRange visas nedan.
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:
Använda Object.clone ()
Java-array implementerar internt ett Cloneable-gränssnitt och det är därför enkelt att klona en Java-array. Du kan klona endimensionella såväl som tvådimensionella matriser. När du klonar en endimensionell array, gör den en djup kopia av array-element som kopierar värdena.
Å andra sidan, när du klonar tvådimensionella eller flerdimensionella matriser, görs en grunt kopia av element, dvs. endast referenser kopieras. Denna kloning av matriser görs med metoden 'Klon ()' som tillhandahålls av matriserna.
En djupkopia av 1-D-matriser som ett resultat av kloning kan representeras enligt nedan:
Låt oss nu implementera 1-D-arraykloning i ett 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 utgången returnerar uttrycket för att kontrollera om båda matriserna är lika. Detta beror på att kloning av en-dimensionell matris resulterar i djupkopiering där värdena kopieras till en ny matris och inte bara referenser.
Vanliga frågor
F # 1) Hur man gör en kopia av en matris i Java?
Svar: Det finns olika metoder för att kopiera en matris.
- Du kan använda en for-loop och kopiera element från en till en annan.
- Använd klonmetoden för att klona en matris.
- Använd metoden arraycopy () i systemklassen.
- Använd copyOf () eller copyOfRange () i Arrays-klass.
F # 2) Hur tilldelar du en matris till en annan?
Svar: Du kan tilldela matrisen till en annan med en enkel tilldelningsoperator (=). Du måste se till att de två matriserna är av samma datatyp och har samma dimension.
F # 3) Vad är en grund kopia och djup kopia?
Svar: I grunt kopia kopieras bara attributen för objekt eller matriser i fråga. Så alla ändringar i den kopierade matrisen återspeglas i originalet. Java-kloning är ett exempel på en grunt kopia.
de viktigaste verktygen för riskhantering är
En djup kopia är den där vi behöver en fullständig kopia av objektet så att när vi klonar eller kopierar det objektet är det en oberoende kopia. När primitiva eller inbyggda typer är inblandade är det ingen skillnad mellan den grunda och djupa kopian.
F # 4) Vad gör en Array Clone?
Svar: Kloningsmetoden för matriser används för att kopiera attributen för ett objekt till ett annat. Den använder en grunt kopia för att göra detta.
F # 5) Kan du lagra en matris i en matris?
Svar: Arrayer kan innehålla arrays försedda med elementen av samma typ (primitiv eller objekt). Det betyder att du inte kan lagra en heltalmatris i en strängmatris.
Slutsats
I den här handledningen utforskade vi kopieringsmatriser och klonarrayer i Java. Vi har sett olika metoder / metoder för att kopiera och klona en matris.
Observera att de flesta av dessa metoder implementerar en grunt kopia. För primitiva datatyper skiljer sig inte grund och djup kopia. Men när en matris innehåller objekt eller referenser måste programmeraren implementera en djup kopia enligt kraven.
I våra efterföljande handledning fortsätter vi att utforska mer om Java-matriser.
=> Läs igenom Easy Java Training Series.
Rekommenderad läsning
- Java Array Length Tutorial With Code Exempel
- Java Generic Array - Hur man simulerar generiska arrays i Java?
- Java Array - Hur man skriver ut delar av en array i Java?
- Flerdimensionella arrayer i Java (2d och 3d arrays i Java)
- Hur man skickar / returnerar en matris i Java
- Hur man sorterar en matris i Java - Handledning med exempel
- Java Array - Förklara, skapa och initialisera en array i Java
- Ta bort / ta bort ett element från en array i Java