Si queremos copiar una matriz, podemos usar System.arraycopy()
o Arrays.copyOf()
. En esta publicación, utilizo un ejemplo simple para demostrar la diferencia entre los dos.
1. Ejemplos de código simple
System.arraycopy ()
int[] arr = {1,2,3,4,5}; int[] copied = new int[10]; System.arraycopy(arr, 0, copied, 1, 5);//5 is the length to copy System.out.println(Arrays.toString(copied)); |
Producción:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 1, 2, 3, 4, 5, 0, 0, 0, 0]
Arrays.copyOf ()
int[] copied = Arrays.copyOf(arr, 10); //10 the the length of the new array System.out.println(Arrays.toString(copied)); copied = Arrays.copyOf(arr, 3); System.out.println(Arrays.toString(copied)); |
Producción:
[1, 2, 3, 4, 5, 0, 0, 0, 0, 0] [1, 2, 3]
2. La principal diferencia
La diferencia es que Arrays.copyOf
no solo copia elementos, también crea una nueva matriz. System.arrayCopy
copia en una matriz existente.
Si leemos el código fuente de Arrays.copyOf (), podemos ver que usa System.arraycopy()
.
public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; } |