我有一个名为矩阵int的二维数组,我想复制到方法中的局部变量,所以我可以编辑它
什么是复制阵列的最佳方法,我遇到了一些麻烦
例如
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;
}
Run Code Online (Sandbox Code Playgroud)
Naw*_*Man 80
复制数组有两种好方法就是使用clone和System.arraycopy().
以下是如何使用克隆2D案例:
int [][] myInt = new int[matrix.length][];
for(int i = 0; i < matrix.length; i++)
myInt[i] = matrix[i].clone();
Run Code Online (Sandbox Code Playgroud)
对于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);
}
Run Code Online (Sandbox Code Playgroud)
我没有基准,但我可以用2美分的赌注,他们比自己做的更快,更容易出错.特别是,System.arraycopy()因为它是在本机代码中实现的.
希望这可以帮助.
编辑:修复bug.
Nic*_*ckF 14
可以使用Java 8中的流来复制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]);
}
Run Code Online (Sandbox Code Playgroud)
您没有初始化本地2D阵列.
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];
}
}
Run Code Online (Sandbox Code Playgroud)