Hacer copia de una matriz
Tengo una matriz a
que se actualiza constantemente. Digamos a = [1,2,3,4,5]
. Necesito hacer un duplicado exacto a
y llamarlo b
. Si a
cambiara a [6,7,8,9,10]
, b
debería seguir siendo [1,2,3,4,5]
. ¿Cuál es la mejor manera de hacer esto? Probé un for
bucle como:
for(int i=0; i<5; i++) {
b[i]=a[i];
}
pero eso no parece funcionar correctamente. No utilice términos avanzados como copia profunda, etc., porque no sé lo que eso significa.
Puedes intentar usar System.arraycopy()
int[] src = new int[]{1,2,3,4,5};
int[] dest = new int[5];
System.arraycopy( src, 0, dest, 0, src.length );
Pero probablemente sea mejor usar clone() en la mayoría de los casos:
int[] src = ...
int[] dest = src.clone();
puedes usar
int[] a = new int[]{1,2,3,4,5};
int[] b = a.clone();
también.
Si desea hacer una copia de:
int[] a = {1,2,3,4,5};
Este es el camino a seguir:
int[] b = Arrays.copyOf(a, a.length);
Arrays.copyOf
puede ser más rápido que a.clone()
en matrices pequeñas. Ambos copian elementos con la misma rapidez, pero clone() regresa, Object
por lo que el compilador tiene que insertar una conversión implícita en int[]
. Puedes verlo en el código de bytes, algo como esto:
ALOAD 1
INVOKEVIRTUAL [I.clone ()Ljava/lang/Object;
CHECKCAST [I
ASTORE 2