在java中复制一个2d数组

我有一个叫做matrixtypes为int的二维数组,我想复制到一个方法的局部variables,所以我可以编辑它

最好的方法是复制arrays,我有一些麻烦

例如

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; } 

有两种好的方法来复制数组,就是使用clone和System.arraycopy()

以下是如何使用克隆的2D案例:

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

对于System.arraycopy(),您可以使用:

 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); } 

我没有一个基准,但我可以用我的2分钱打赌,他们比自己更快, 更不容易犯错 。 尤其是, System.arraycopy()在本地代码中实现。

希望这可以帮助。

编辑:修正错误。

可以使用Java 8中的stream复制二维数组。

 @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]); } 

您不是初始化本地二维数组。

 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]; } } 

你也可以这样编码myInt = matrix.clone();