copiar una matriz 2d en java

Tengo una matriz 2d llamada matriz de tipo int que quiero copiar a una variable local en un método para poder editarlo

¿Cuál es la mejor manera de copiar la matriz? Tengo algunos problemas

por ejemplo

int [][] myInt; for(int i = 0; i< matrix.length; i++){ for (int j = 0; j < matrix[i].length; j++){ myInt[i][j] = matrix[i][j]; } } //do some stuff here return true; } 

Hay dos buenas maneras de copiar matrices es usar clone y System.arraycopy() .

Aquí está cómo usar el clon para el caso 2D:

 int [][] myInt = new int[matrix.length][]; for(int i = 0; i < matrix.length; i++) myInt[i] = matrix[i].clone(); 

Para System.arraycopy (), utiliza:

 int [][] myInt = new int[matrix.length][]; for(int i = 0; i < matrix.length; i++) { int[] aMatrix = matrix[i]; int aLength = aMatrix.length; myInt[i] = new int[aLength]; System.arraycopy(aMatrix, 0, myInt[i], 0, aLength); } 

No tengo un punto de referencia, pero puedo apostar con mis 2 centavos que son más rápidos y menos propensos a errores que hacerlo tú mismo. Especialmente, System.arraycopy() como se implementa en código nativo.

Espero que esto ayude.

Editar: error solucionado.

Es posible usar flujos en Java 8 para copiar una matriz 2D.

 @Test public void testCopy2DArray() { int[][] data = {{1, 2}, {3, 4}}; int[][] dataCopy = Arrays.stream(data) .map((int[] row) -> row.clone()) .toArray((int length) -> new int[length][]); assertNotSame(data, dataCopy); assertNotSame(data[0], dataCopy[0]); assertNotSame(data[1], dataCopy[1]); dataCopy[0][1] = 5; assertEquals(2, data[0][1]); assertEquals(5, dataCopy[0][1]); } 

No está inicializando la matriz 2D local.

 int[][] myInt = new int[matrix.length][]; for(int i = 0; i < matrix.length; i++) { myInt[i] = new int[matrix[i].length]; for (int j = 0; j < matrix[i].length; j++) { myInt[i][j] = matrix[i][j]; } } 

usted puede codificar así también myInt = matrix.clone ();