Copia profunda de un array en Java
-
Copia profunda usando la función
System.arraycopy()
en Java -
Copia profunda de un array usando el comando
Arrays.copyOf
en Java
![Copia profunda de un array en Java](/img/Java/feature-image---java-deep-copy-array.webp)
En este tutorial, discutimos cómo realizar una copia profunda de un array en Java.
Generalmente, hay dos tipos de métodos de copia de array en Java: la copia superficial y la copia profunda. En la copia superficial, los objetos se copian. Por otro lado, todos los elementos se copian mientras se crea un array diferente en Deep Copy.
A continuación se muestra un ejemplo que muestra lo que sucede cuando copiamos un array en otra directamente. Creamos un array arr1
con elementos y luego inicializamos otro arr2
con arr1
. Cuando se cambia cualquier elemento de arr2
, el cambio también se refleja en arr1
.
import java.util.Arrays;
public class DeepCopy {
public static void main(String[] args) {
int[] arr1 = {10, 20, 30};
System.out.println("arr1 Before copying: " + Arrays.toString(arr1));
int[] arr2 = arr1;
System.out.println("arr2 After copying: " + Arrays.toString(arr1));
arr2[0] = 30;
System.out.println(
"arr1 after copying and changing an element in arr2: " + Arrays.toString(arr1));
}
}
Producción :
arr1 Before copying: [10, 20, 30]
arr2 After copying: [10, 20, 30]
arr1 after copying and changing an element in arr2: [30, 20, 30]
Copia profunda usando la función System.arraycopy()
en Java
En el siguiente ejemplo, tomamos un array arr1
con algunos elementos y luego tomamos otra matriz arr2
y le damos el tamaño igual al de arr1
. Llamamos al método arrayCopy()
de la clase System
que copia un array a otra.
La función arrayCopy()
toma cuatro argumentos; los dos primeros son el array fuente y la posición inicial de copia en el array fuente. El tercer argumento es el array de destino y su posición inicial, donde copiaremos elementos y la cantidad de elementos que se copiarán en una nueva matriz.
Cuando cambiamos el elemento arr2
, al igual que en el ejemplo anterior, los elementos de arr1
no cambian en absoluto.
import java.util.Arrays;
public class DeepCopy {
public static void main(String[] args) {
int[] arr1 = {10, 20, 30};
System.out.println("arr1 Before copying: " + Arrays.toString(arr1));
int[] arr2 = new int[arr1.length];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
System.out.println("arr2 After copying: " + Arrays.toString(arr1));
arr2[0] = 30;
System.out.println(
"arr1 after copying and changing an element in arr2: " + Arrays.toString(arr1));
}
}
Producción :
arr1 Before copying: [10, 20, 30]
arr2 After copying: [10, 20, 30]
arr1 after copying and changing an element in arr2: [10, 20, 30]
Copia profunda de un array usando el comando Arrays.copyOf
en Java
A continuación, usamos el método copyOf()
de la clase de utilidad Arrays
. Acepta el array para copiar y su tamaño luego devuelve el array del mismo tipo. Hacemos una nueva matriz arr2
usando este método y verificamos si al cambiar arr2
cambia arr1
o no. La salida muestra el resultado.
Tenga en cuenta que este método y el anterior crean una copia superficial en lugar de una copia profunda cuando el array contiene objetos en lugar de primitivas.
import java.util.Arrays;
public class DeepCopy {
public static void main(String[] args) {
int[] arr1 = {10, 20, 30};
System.out.println("arr1 Before copying: " + Arrays.toString(arr1));
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
System.out.println("arr2 After copying: " + Arrays.toString(arr1));
arr2[0] = 30;
System.out.println(
"arr1 after copying and changing an element in arr2: " + Arrays.toString(arr1));
}
}
Producción :
arr1 Before copying: [10, 20, 30]
arr2 After copying: [10, 20, 30]
arr1 after copying and changing an element in arr2: [30, 20, 30]
También podemos usar Arrays.copyOf()
para copiar un array bidimensional. En el siguiente ejemplo, tenemos un array 2D arr
. Tenemos una nueva matriz arr2
, y en el bucle, usamos Arrays.copyOf
que toma cada elemento de arr
y lo copia en el arr2
elemento por elemento. Una vez copiado, comprobamos si arr1
cambia si se cambia arr2
. Si no cambia, es un array copiada en profundidad.
import java.util.Arrays;
public class DeepCopy {
public static void main(String[] args) {
int[][] arr = {{1, 2}, {3, 4}, {5, 6}};
System.out.println("Values of arr");
for (int i = 0; i < arr.length; i++)
for (int j = 0; j < arr.length - 1; j++)
System.out.println("arr[" + i + "][" + j + "] = " + arr[i][j]);
System.out.println();
int[][] arr2 = new int[arr.length][];
for (int i = 0; i < arr.length; i++) {
arr2[i] = Arrays.copyOf(arr[i], arr[i].length);
}
System.out.println("Values of arr2");
for (int i = 0; i < arr2.length; i++)
for (int j = 0; j < arr2.length - 1; j++)
System.out.println("arr2[" + i + "][" + j + "] = " + arr2[i][j]);
arr2[0][1] = 5;
System.out.println();
System.out.println("Values of arr after changing an element in arr2");
for (int i = 0; i < arr.length; i++)
for (int j = 0; j < arr.length - 1; j++)
System.out.println("arr[" + i + "][" + j + "] = " + arr[i][j]);
}
}
Producción :
Values of arr
arr[0][0] = 1
arr[0][1] = 2
arr[1][0] = 3
arr[1][1] = 4
arr[2][0] = 5
arr[2][1] = 6
Values of arr2
arr2[0][0] = 1
arr2[0][1] = 2
arr2[1][0] = 3
arr2[1][1] = 4
arr2[2][0] = 5
arr2[2][1] = 6
Values of arr after changing an element in arr2
arr[0][0] = 1
arr[0][1] = 2
arr[1][0] = 3
arr[1][1] = 4
arr[2][0] = 5
arr[2][1] = 6
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn