java copy array how copy clone an array java
Questo tutorial sulla copia e clonazione di array discute i vari metodi per copiare un array in Java:
Qui discuteremo l'operazione di copia degli array Java. Java fornisce vari modi in cui è possibile creare copie di elementi dell'array. Come sappiamo, in Java, gli array possono contenere elementi di tipi primitivi o oggetti o riferimenti.
Durante la creazione di copie di tipi primitivi, l'attività è piuttosto semplice, ma quando si tratta di oggetti o riferimenti, è necessario prestare attenzione al fatto che la copia sia profonda o superficiale.
=> Dai un'occhiata alla guida per principianti di Java qui.
La copia superficiale crea una copia dell'elemento. Non è un problema quando sono coinvolti tipi di dati primitivi. Ma quando sono coinvolti riferimenti, una copia superficiale copierà solo il valore e non le informazioni sottostanti.
Pertanto, anche se sono state eseguite copie di elementi, una modifica in una copia si rifletterà anche in un'altra copia poiché le posizioni di memoria sono condivise. Per evitare ciò, è necessario eseguire una copia completa in cui le posizioni di memoria non sono condivise.
Cosa imparerai:
Copia e clona array Java
Java consente di copiare array utilizzando il metodo di copia diretta fornito da java.util o la classe System. Fornisce inoltre un metodo di clonazione utilizzato per clonare un intero array.
In questo tutorial, discuteremo i seguenti metodi di copia e clonazione di array.
- Copia manuale utilizzando il ciclo for
- Utilizzo di System.arraycopy ()
- Utilizzo di Arrays.copyOf ()
- Utilizzo di Arrays.copyOfRange ()
- Utilizzando Object.clone ()
Esploriamo !!
Copia manuale utilizzando For Loop
Normalmente quando copiamo variabili, ad esempio aeb, eseguiamo l'operazione di copia come segue:
a = b;
Non funzionerà correttamente se applichiamo lo stesso metodo agli array.
Vediamo un esempio di programmazione.
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 Produzione:

Nel programma sopra, ci sono due array, cioè intArray e copyArray. Il compito è copiare il contenuto di intArray in copyArray. Per fare ciò, viene introdotta l'istruzione copyArray = intArray. Quello che viene fatto qui è che vengono assegnati i riferimenti dell'array. Quindi questa non è una copia effettiva.
Come risultato dell'istruzione precedente, anche la posizione di memoria di intArray è condivisa da copyArray. Ora, quando l'elemento copyArray viene incrementato, tale modifica si riflette anche nell'intArray. Questo è mostrato nell'output.
Per superare questo problema, utilizziamo un metodo per copiare l'array utilizzando il ciclo for. Qui, ogni elemento dell'array originale viene copiato nel nuovo array usando un ciclo for.
Questo programma è mostrato di seguito.
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 Produzione:

Qui abbiamo modificato il programma precedente per includere il ciclo for e all'interno del ciclo for, assegniamo ogni elemento di intArray all'elemento corrispondente di copyArray. In questo modo, gli elementi vengono effettivamente copiati. Quindi, quando un array viene modificato, le modifiche non si riflettono in un altro array.
Utilizzo di System.arraycopy ()
La classe System di Java ha un metodo chiamato 'ArrayCOpy' che ti consente di copiare gli elementi di un array in un altro array.
Il prototipo generale di questo metodo è il seguente:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Qui,
- src_array => Matrice di origine da cui copiare i contenuti.
- src_Pos => La posizione nell'array di origine da cui inizierà la copia.
- dest_array => Matrice di destinazione in cui devono essere copiati gli elementi.
- dest_Pos => Posizione iniziale nella matrice di destinazione per gli elementi da copiare.
- lunghezza => Lunghezza dell'array da copiare.
Comprendiamo questo metodo con un esempio.
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)); } }
Produzione:

Nel programma precedente, utilizziamo il metodo 'arraycopy' per copiare un array in un altro array. Puoi vedere la chiamata al metodo arraycopy. Copiamo l'array sorgente dall'inizio (0thlocation) e copia l'intero array.
Infine, mostriamo l'equivalente stringa sia dell'array di origine che di quello di destinazione.
Con il metodo arraycopy, è possibile copiare anche array parziali poiché accetta le posizioni degli elementi iniziale e finale come argomenti. Questo metodo crea una copia superficiale degli elementi dell'array.
Utilizzo di Arrays.copyOf ()
Il metodo Arrays.copyOf () utilizza internamente il metodo System.arraycopy (). Sebbene non sia efficiente come arraycopy, può essere utilizzato per copiare un array completo o parziale proprio come il metodo arraycopy.
Il metodo 'copyOf ()' fa parte del pacchetto java.util e appartiene alla classe 'Arrays'.
Il prototipo di questo metodo è il seguente:
public static int() copyOf(int() original_array,int newLength)
Dove,
- originale: L'array da copiare nel nuovo array.
- newLength: La lunghezza della matrice copiata da restituire.
Pertanto, questo metodo crea una copia dell'array fornito nel primo argomento alla lunghezza specificata troncando o riempiendo la lunghezza con 0 nel nuovo array. Ciò significa che se la lunghezza dell'array copiato è maggiore dell'array originale, gli 0 vengono sostituiti per gli elementi rimanenti.
Il programma fornito di seguito mostra un esempio del metodo 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)); } }
Produzione:

Nel programma sopra, copiamo il even_Array di lunghezza 4 utilizzando il metodo copyOf. Il secondo argomento fornito è 5. Quindi, il nuovo array copiato contiene 5 elementi. I primi quattro sono gli stessi dell'array originale e il quinto elemento è 0 come copyOf pad perché la lunghezza dell'array originale è inferiore a quella del nuovo array.
Utilizzo di Arrays.copyOfRange ()
Il metodo Arrays.copyOfRange () viene utilizzato specificamente quando si desidera copiare array parziali. Come il metodo copyOf (), anche questo metodo utilizza internamente il metodo System.arraycopy ().
Il prototipo del metodo Arrays.copyOfRange () è il seguente:
public static short() copyOfRange(short() original, int from, int to)
dove,
- originale: L'array da cui deve essere copiato un intervallo.
- a partire dal: Indice iniziale dell'intervallo da copiare, incluso.
- per: L'indice finale dell'intervallo da copiare, esclusivo.
Di seguito è mostrata un'implementazione di esempio del metodo 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)); } }
Produzione:

Utilizzando Object.clone ()
L'array Java implementa internamente un'interfaccia clonabile e quindi è facile clonare un array Java. È possibile clonare array unidimensionali e bidimensionali. Quando si clona un array unidimensionale, viene eseguita una copia completa degli elementi dell'array che copia i valori.
D'altra parte, quando si clonano array bidimensionali o multidimensionali, viene creata una copia superficiale degli elementi, ovvero vengono copiati solo i riferimenti. Questa clonazione di array viene eseguita con il metodo 'Clone ()' fornito dagli array.
Una copia completa di array 1-D come risultato della clonazione può essere rappresentata come di seguito:

Ora implementiamo la clonazione dell'array 1-D in un programma 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 Come puoi vedere nell'output, l'espressione per verificare l'uguaglianza di entrambi gli array restituisce false. Questo perché la clonazione di un array unidimensionale produce una copia completa in cui i valori vengono copiati in un nuovo array e non solo riferimenti.
Domande frequenti
D # 1) Come creare una copia di un array in Java?
Risposta: Esistono diversi metodi per copiare un array.
- Puoi usare un ciclo for e copiare gli elementi di uno in un altro uno alla volta.
- Usa il metodo clone per clonare un array.
- Usa il metodo arraycopy () della classe System.
- Usa i metodi copyOf () o copyOfRange () della classe Arrays.
D # 2) Come si assegna un array a un altro?
Risposta: È possibile assegnare l'array a un altro utilizzando un semplice operatore di assegnazione (=). È necessario assicurarsi che i due array siano dello stesso tipo di dati e abbiano una dimensione identica.
D # 3) Che cos'è una copia superficiale e una copia profonda?
Risposta: Nella copia superficiale, vengono copiati solo gli attributi degli oggetti o degli array in questione. Quindi qualsiasi modifica all'array copiato si rifletterà nell'originale. La clonazione di Java è un esempio di copia superficiale.
domande e risposte dell'intervista Android pdf
Una copia completa è quella in cui abbiamo bisogno di una copia completa dell'oggetto in modo che quando cloniamo o copiamo quell'oggetto, sia una copia indipendente. Quando sono coinvolti tipi primitivi o incorporati, non c'è differenza tra la copia superficiale e profonda.
D # 4) Cosa fa un Array Clone?
Risposta: Il metodo di clonazione degli array viene utilizzato per copiare gli attributi di un oggetto in un altro. Usa una copia superficiale per farlo.
D # 5) È possibile memorizzare un array in un array?
Risposta: Gli array possono contenere array forniti con gli elementi che sono dello stesso tipo (primitivo o oggetto). Ciò significa che non è possibile memorizzare un array di numeri interi in un array di stringhe.
Conclusione
In questo tutorial, abbiamo esplorato array di copie e array di cloni in Java. Abbiamo visto vari metodi / approcci per copiare e clonare un array.
Nota che la maggior parte di questi metodi implementa una copia superficiale. Per i tipi di dati primitivi, la copia superficiale e la copia profonda non differiscono. Ma quando un array contiene oggetti o riferimenti, il programmatore deve implementare una copia completa secondo i requisiti.
Nei nostri tutorial successivi, continueremo a esplorare di più sugli array Java.
=> Leggere attraverso la serie di formazione Easy Java.
Lettura consigliata
- Tutorial sulla lunghezza di array Java con esempi di codice
- Java Generic Array - Come simulare array generici in Java?
- Java Array - Come stampare elementi di un array in Java?
- Array multidimensionali in Java (array 2d e 3d in Java)
- Come passare / restituire un array in Java
- Come ordinare un array in Java - Tutorial con esempi
- Array Java: dichiara, crea e inizializza un array in Java
- Rimuovi / Elimina un elemento da un array in Java