In questo tutorial imparerai i diversi modi in cui puoi utilizzare per copiare array (sia unidimensionali che bidimensionali) in Java con l'aiuto di esempi.
In Java, possiamo copiare un array in un altro. Esistono diverse tecniche che è possibile utilizzare per copiare array in Java.
1. Copia di array utilizzando l'operatore di assegnazione
Facciamo un esempio,
class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )
Uscita :
1, 2, 3, 4, 5, 6
Nell'esempio precedente, abbiamo utilizzato l'operatore di assegnazione ( =
) per copiare un array denominato numbers in un altro array denominato positiveNumbers.
Questa tecnica è la più semplice e funziona anche. Tuttavia, c'è un problema con questa tecnica. Se cambiamo gli elementi di un array, cambiano anche gli elementi corrispondenti degli altri array. Per esempio,
class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays // change value of first array numbers(0) = -1; // printing the second array for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )
Uscita :
-1, 2, 3, 4, 5, 6
Qui possiamo vedere che abbiamo cambiato un valore dell'array dei numeri. Quando stampiamo l'array positiveNumbers, possiamo vedere che anche lo stesso valore viene modificato.
È perché entrambi gli array fanno riferimento allo stesso oggetto array. Ciò è dovuto alla copia superficiale. Per ulteriori informazioni sulla copia superficiale, visita la copia superficiale.
Ora, per creare nuovi oggetti array durante la copia degli array, abbiamo bisogno di una copia profonda piuttosto che di una copia superficiale.
2. Utilizzo di Looping Construct per copiare array
Facciamo un esempio:
import java.util.Arrays; class Main ( public static void main(String() args) ( int () source = (1, 2, 3, 4, 5, 6); int () destination = new int(6); // iterate and copy elements from source to destination for (int i = 0; i < source.length; ++i) ( destination(i) = source(i); ) // converting array to string System.out.println(Arrays.toString(destination)); ) )
Uscita :
(1, 2, 3, 4, 5, 6)
Nell'esempio precedente, abbiamo utilizzato il for
ciclo per iterare attraverso ogni elemento dell'array sorgente. In ogni iterazione, stiamo copiando elementi dall'array di origine all'array di destinazione.
Qui, l'array di origine e di destinazione si riferiscono a oggetti diversi (copia completa). Quindi, se gli elementi di un array vengono modificati, gli elementi corrispondenti di un altro array rimangono invariati.
Notare la dichiarazione,
System.out.println(Arrays.toString(destination));
Qui, il metodo toString () viene utilizzato per convertire un array in una stringa. Per saperne di più, visita il metodo toString () (documentazione ufficiale di Java).
3. Copia di array utilizzando il metodo arraycopy ()
In Java, la classe System contiene un metodo denominato arraycopy()
per copiare gli array. Questo metodo è un approccio migliore per copiare gli array rispetto ai due precedenti.
Il arraycopy()
metodo consente di copiare una parte specificata dell'array di origine nell'array di destinazione. Per esempio,
arraycopy(Object src, int srcPos,Object dest, int destPos, int length)
Qui,
- src - array di origine che desideri copiare
- srcPos - posizione iniziale (indice) nell'array di origine
- dest - array di destinazione in cui gli elementi verranno copiati dall'origine
- destPos - posizione iniziale (indice) nell'array di destinazione
- lunghezza - numero di elementi da copiare
Facciamo un esempio:
// To use Arrays.toString() method import java.util.Arrays; class Main ( public static void main(String() args) ( int() n1 = (2, 3, 12, 4, 12, -2); int() n3 = new int(5); // Creating n2 array of having length of n1 array int() n2 = new int(n1.length); // copying entire n1 array to n2 System.arraycopy(n1, 0, n2, 0, n1.length); System.out.println("n2 = " + Arrays.toString(n2)); // copying elements from index 2 on n1 array // copying element to index 1 of n3 array // 2 elements will be copied System.arraycopy(n1, 2, n3, 1, 2); System.out.println("n3 = " + Arrays.toString(n3)); ) )
Uscita :
n2 = (2, 3, 12, 4, 12, -2) n3 = (0, 12, 4, 0, 0)
Nell'esempio sopra, abbiamo utilizzato il arraycopy()
metodo,
System.arraycopy(n1, 0, n2, 0, n1.length)
- interi elementi dell'array n1 vengono copiati nell'array n2System.arraycopy(n1, 2, n3, 1, 2)
- 2 elementi dell'array n1 a partire dall'indice 2 vengono copiati nell'indice a partire da 1 dell'array n3
Come puoi vedere, il valore iniziale predefinito degli elementi di un array di tipo int è 0.
4. Copia di array utilizzando il metodo copyOfRange ()
Possiamo anche utilizzare il metodo copyOfRange () definito nella classe Java Arrays per copiare gli array. Per esempio,
// To use toString() and copyOfRange() method import java.util.Arrays; class ArraysCopy ( public static void main(String() args) ( int() source = (2, 3, 12, 4, 12, -2); // copying entire source array to destination int() destination1 = Arrays.copyOfRange(source, 0, source.length); System.out.println("destination1 = " + Arrays.toString(destination1)); // copying from index 2 to 5 (5 is not included) int() destination2 = Arrays.copyOfRange(source, 2, 5); System.out.println("destination2 = " + Arrays.toString(destination2)); ) )
Produzione
destinazione1 = (2, 3, 12, 4, 12, -2) destinazione2 = (12, 4, 12)
Nell'esempio sopra, nota la linea,
int() destination1 = Arrays.copyOfRange(source, 0, source.length);
Qui, possiamo vedere che stiamo creando l'array destination1 e copiando allo stesso tempo l'array di origine. Non stiamo creando l'array destination1 prima di chiamare il copyOfRange()
metodo. Per ulteriori informazioni sul metodo, visitare Java copyOfRange.
5. Copia di array 2d usando Loop
Simile all'array unidimensionale, possiamo anche copiare l'array bidimensionale usando il for
loop. Per esempio,
import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < destination.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); for (int j = 0; j < destination(i).length; ++j) ( destination(i)(j) = source(i)(j); ) ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )
Uscita :
((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))
Nel programma sopra, nota la linea,
System.out.println(Arrays.deepToString(destination);
Qui, il deepToString()
metodo viene utilizzato per fornire una migliore rappresentazione della matrice bidimensionale. Per saperne di più, visita Java deepToString ().
Copia di array 2d usando arraycopy ()
Per rendere il codice sopra più semplice, possiamo sostituire il ciclo interno con System.arraycopy()
come nel caso di un array monodimensionale. Per esempio,
import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < source.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); System.arraycopy(source(i), 0, destination(i), 0, destination(i).length); ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )
Uscita :
((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))
Qui, possiamo vedere che otteniamo lo stesso output sostituendo il for
ciclo interno con il arraycopy()
metodo.