Java:从2d数组复制单个数组

时间:2016-11-06 16:07:15

标签: java arrays

当我在这里浏览答案时,我读到了

  

" Java没有真正的二维数组;它有数组   数组,所以x [rows] [cols]是cols元素的行数组的数组x   (即x [rows]是一个数组数组)。"

这对我来说似乎是个好消息,因为我想通过复制"行"来创建单个1D阵列。来自2D阵列。从我的2D数组P调用特定数组的正确语法是什么?基本上:

new double[] row1 = P[row];

或者我是否必须遍历要复制的行?我已经尝试了上面的代码和几种类似的方法。所有人都收到"缺少数组维度的错误"。

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用引用,而不是副本:

final double[] row1 = P[row];

但是,如果您需要副本,可以这样做:

final double[] row1 = Arrays.copy(P[row], P[row].length);

这当然假设P的类型为double[][]rowint,它位于有效的索引范围内。

答案 1 :(得分:1)

如果您想要引用到一行,可以使用double[] selectedRow = P[rowToSelect]。代码中的new关键字放错了位置。如果您想要真实副本或更好地称为深层副本,您可以使用:

double[] selectedRow = new double[P[rowToSelect].length];
System.arraycopy(P[rowToSelect], 0, selectedRow, 0, P[rowToSelect].length);`

答案 2 :(得分:1)

在您的代码中,您正在复制引用,而不是数组

new double[] row1 = P[row];

如果修改其中任何一个,两者都会显示结果。

要复制数组,您可以使用数组类中的静态方法 copyOf

double[][] source = new double[rows][cols];
double[] destination = Arrays.copyOf(source[rowNumber], source[rowNumber].length);

另一种方法是使用系统类中的静态方法 arraycopy

System.arraycopy( source[rowNumber], 0, destination, 0, source[rowNumber].length );

最后一个是通过调用 clone 方法:

double[] destination = source[rowNumber].clone();