Copiare un array in Java
Per copiare un array in Java, ci sono diversi modi.
Personalmente ne conosco 4 (e mezzo se contiamo due metodi molto simili); tra questi ce ne è uno sbagliato:
- rendere il secondo array uguale al primo (pratica sbagliata)
- usando il metodo clone di Object; in Java gli array sono oggetti
- usando Arrays.copyOf o Arrays.copyOfRange
- usando System.arraycopy
A me personalmente piace di più usare i metodi della classe Arrays.
Comunque vi posto tutti i metodi, che eseguono le stesse identiche operazioni.
Studiatevi l'output per vedere perchè il primo metodo è concettualmente sbagliato:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
sbagliato();
objClone();
arrsCopyOf();
sysArrsCopy();
}
public static void sbagliato() {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = arr1;
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
arr1[2] = 50;
arr2[2] = 23;
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
}
public static void objClone() {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = arr1.clone();
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
arr1[2] = 50;
arr2[2] = 23;
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
}
public static void arrsCopyOf() {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
arr1[2] = 50;
arr2[2] = 23;
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
}
public static void sysArrsCopy() {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = new int[arr1.length];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
arr1[2] = 50;
arr2[2] = 23;
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
}
}
Una nota su System.arraycopy, che non è proprio immediato da usare.
Richiede quattro parametri:
- l'array sorgente da copiare
- il valore da cui cominciare a copiare
- l'array destinazione
- la posizione di partenza in cui copiare (può essere anche l'array già esista e sia diverso dal primo)
- il numero di elementi da copiare
Ovviamente, nell'esempio fatto, il secondo array sarà identico al primo.
Enjoy!
java object arrays clone system copyof copyofrange arraycopy
Commentami!