java copy array how copy clone an array java
Aquest tutorial sobre la còpia i la clonació de matrius tracta els diversos mètodes per copiar una matriu a Java:
Aquí parlarem de l'operació de còpia de matrius de Java. Java proporciona diverses maneres de fer còpies d'elements de matriu. Com sabem, a Java, les matrius poden contenir elements de tipus primitiu o bé objectes o referències.
Tot i fer còpies de tipus primitius, la tasca és bastant senzilla, però quan es tracta d’objectes o referències, cal parar atenció a si la còpia és profunda o poc profunda.
=> Feu una ullada a la guia per a principiants de Java aquí
La còpia poc profunda fa una còpia de l’element. No és un problema quan hi ha tipus de dades primitives. Però quan es tracta de referències, una còpia superficial només copiarà el valor i no la informació subjacent.
Així, tot i que heu fet còpies d'elements, un canvi en una còpia també es reflectirà en una altra còpia a mesura que es comparteixin les ubicacions de memòria. Per evitar-ho, heu de buscar una còpia profunda en què no es comparteixin les ubicacions de memòria.
Què aprendreu:
Copia i clona matrius de Java
Java us permet copiar matrius mitjançant el mètode de còpia directa proporcionat per java.util o la classe System. També proporciona un mètode de clonació que s’utilitza per clonar tota una matriu.
En aquest tutorial, parlarem dels mètodes següents per copiar i clonar matrius.
- Còpia manual mitjançant bucle for
- Utilització de System.arraycopy ()
- Ús de Arrays.copyOf ()
- Ús de Arrays.copyOfRange ()
- Utilitzant Object.clone ()
Explorem !!
Còpia manual mitjançant Loop
Normalment, quan copiem variables, per exemple, a i b, realitzem l'operació de còpia de la següent manera:
a = b;
No funcionarà correctament si apliquem el mateix mètode a les matrius.
Vegem un exemple de programació.
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 Sortida:

Al programa anterior, hi ha dues matrius, és a dir, intArray i copyArray. La tasca consisteix a copiar el contingut de l’intArray a copyArray. Per fer-ho, s'introdueix la declaració copyArray = intArray. El que es fa aquí és que s’assignen les referències de la matriu. Per tant, això no és una còpia real.
Com a resultat de la declaració anterior, la ubicació de memòria de l'intArray també és compartida per copyArray. Ara, quan l'element copyArray s'incrementa, aquest canvi també es reflecteix a l'intArray. Això es mostra a la sortida.
Per superar aquest problema, utilitzem un mètode de còpia de la matriu mitjançant el bucle for. Aquí, cada element de la matriu original es copia a la nova matriu mitjançant un bucle for.
Aquest programa es mostra a continuació.
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 Sortida:

Aquí hem modificat el programa anterior per incloure-lo per bucle i dins per bucle, assignem cada element d’intArray a l’element corresponent de copyArray. D'aquesta manera, els elements es copien realment. Per tant, quan es modifica una matriu, els canvis no es reflecteixen en una altra matriu.
Utilització de System.arraycopy ()
La classe System de Java té un mètode anomenat 'ArrayCOpy' que permet copiar elements d'una matriu a una altra matriu.
El prototip general d’aquest mètode és el següent:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Aquí,
- src_array => Matriu d'origen des d'on es vol copiar el contingut.
- src_Pos => La posició a la matriu d'origen des d'on s'iniciarà la còpia.
- dest_array => Matriu de destinació en què s'han de copiar els elements.
- dest_Pos => Posició inicial a la matriu de destinació dels elements a copiar.
- llargada => Longitud de la matriu a copiar.
Comprenem aquest mètode amb un exemple.
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)); } }
Sortida:

Al programa anterior, fem servir el mètode ‘arraycopy’ per copiar una matriu a una altra matriu. Podeu veure la trucada al mètode d'arracòpia. Copiem la matriu d'origen des del principi (0thubicació) i copieu tota la matriu.
Per últim, mostrem l'equivalent de cadena tant de les matrius d'origen com de destinació.
Amb el mètode d'arraycopy, podeu copiar fins i tot matrius parcials ja que pren la posició de l'element inicial i final com a arguments. Aquest mètode fa una còpia superficial d'elements de matriu.
Ús de Arrays.copyOf ()
El mètode Arrays.copyOf () fa ús intern del mètode System.arraycopy (). Tot i que no és tan eficaç com l’arraicòpia, es pot utilitzar per copiar una matriu completa o parcial, igual que el mètode d’arraicòpia.
El mètode ‘copyOf ()’ forma part del paquet java.util i pertany a la classe “Arrays”.
El prototip d’aquest mètode és el següent:
public static int() copyOf(int() original_array,int newLength)
On,
- original: La matriu que es copiarà a la nova matriu.
- longitud nova: La longitud de la matriu copiada que es retornarà.
Per tant, aquest mètode fa una còpia de la matriu proporcionada en el primer argument a la longitud especificada truncant o encoixinant la longitud amb 0 a la nova matriu. Això significa que si la longitud de la matriu copiada és superior a la matriu original, se substituiran 0 per la resta d'elements.
El programa que es mostra a continuació mostra un exemple del mètode 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)); } }
Sortida:

Al programa anterior, copiem la matriu even_Array de longitud 4 mitjançant el mètode copyOf. El segon argument proporcionat és 5. Per tant, la nova matriu copiada conté 5 elements. Els primers quatre són els mateixos que la matriu original i el cinquè element és 0, ja que copyOf la tapa perquè la longitud de la matriu original és inferior a la de la matriu nova.
Ús de Arrays.copyOfRange ()
El mètode Arrays.copyOfRange () s’utilitza específicament quan es volen copiar matrius parcials. Igual que el mètode copyOf (), aquest mètode també fa ús intern del mètode System.arraycopy ().
El prototip del mètode Arrays.copyOfRange () és el següent:
public static short() copyOfRange(short() original, int from, int to)
on,
- original: La matriu a partir de la qual es vol copiar un interval.
- de: Índex inicial de l'interval a copiar, inclòs.
- a: L'índex final de l'interval a copiar, exclusiu.
A continuació es mostra un exemple d’implementació del mètode 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)); } }
Sortida:

Utilitzant Object.clone ()
La matriu Java implementa internament una interfície clonable i, per tant, és fàcil clonar una matriu Java. Podeu clonar matrius unidimensionals i bidimensionals. Quan cloneu una matriu unidimensional, es fa una còpia profunda d'elements de matriu que copia els valors.
D’altra banda, quan cloneu matrius bidimensionals o multidimensionals, es fa una còpia poc profunda d’elements, és a dir, que només es copien les referències. Aquesta clonació de matrius es realitza mitjançant el mètode 'Clona ()' proporcionat per les matrius.
Una còpia profunda de les matrius 1-D com a resultat de la clonació es pot representar de la manera següent:

Ara implementem la clonació de matriu 1-D en un programa 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 Com podeu veure a la sortida, l'expressió per comprovar la igualtat de les dues matrius torna falsa. Això es deu al fet que la clonació d'una matriu unidimensional dóna lloc a una còpia profunda en què els valors es copien a una matriu nova i no només a referències.
Preguntes freqüents
P # 1) Com fer una còpia d'una matriu a Java?
Resposta: Hi ha diferents mètodes per copiar una matriu.
- Podeu utilitzar un bucle for i copiar elements d'un a un altre un per un.
- Utilitzeu el mètode de clonació per clonar una matriu.
- Utilitzeu el mètode arraycopy () de la classe System.
- Utilitzeu mètodes copyOf () o copyOfRange () de la classe Arrays.
P # 2) Com assignar una matriu a una altra?
Resposta: Podeu assignar la matriu a una altra mitjançant un simple operador d'assignació (=). Heu de garantir que les dues matrius siguin del mateix tipus de dades i tinguin una dimensió idèntica.
P # 3) Què és una còpia superficial i una còpia profunda?
Resposta: En una còpia poc profunda, només es copien els atributs dels objectes o matrius en qüestió. Per tant, qualsevol canvi a la matriu copiada es reflectirà a l'original. La clonació de Java és un exemple de còpia poc profunda.
la millor aplicació de canviador de veu per a PC
Una còpia profunda és aquella en què necessitem una còpia completa de l'objecte perquè, quan clonem o copiem, sigui una còpia independent. Quan es tracta de tipus primitius o incorporats, no hi ha diferències entre la còpia poc profunda i la profunda.
P # 4) Què fa un clon de matriu?
Resposta: El mètode de clonació de matrius s’utilitza per copiar els atributs d’un objecte a un altre. Utilitza una còpia superficial per fer-ho.
P # 5) Podeu emmagatzemar un array en un array?
Resposta: Les matrius poden contenir matrius proporcionats amb els elements del mateix tipus (primitiu o objecte). Això significa que no podeu emmagatzemar una matriu sencera en una matriu de cadenes.
Conclusió
En aquest tutorial, hem explorat matrius de còpia i matrius de clons a Java. Hem vist diversos mètodes / enfocaments per copiar i clonar una matriu.
Tingueu en compte que la majoria d’aquests mètodes implementen una còpia poc profunda. Per als tipus de dades primitius, la còpia profunda i profunda no difereix. Però quan una matriu conté objectes o referències, el programador ha d’implementar una còpia profunda segons els requisits.
En els nostres tutorials posteriors, continuem explorant més sobre les matrius de Java.
=> Llegiu la sèrie de formació Java fàcil.
Lectura recomanada
- Tutorial de longitud de matriu de Java amb exemples de codi
- Matriu genèrica de Java: com simular matrius genèrics a Java?
- Java Array - Com imprimir elements d'un array a Java?
- Arrays multidimensionals a Java (Arrays 2d i 3d a Java)
- Com passar / retornar una matriu a Java
- Com ordenar una matriu a Java: tutorial amb exemples
- Matriu Java: declarar, crear i inicialitzar una matriu a Java
- Eliminar / suprimir un element d'una matriu a Java