我需要每次在循环中调用一个数组,并将其用作另一个方法的输入。然后从该方法的输出中,我将需要更新该数组的副本,并在ArrayList
中更改后存储该副本。比如一个例子:
double[]a={1,2,3,4}
使用' a
&#39>在作为输入的方法中,我将不得不更新' a
'并存储在数组列表中但下次在循环中我需要原始的' a
'再次。一旦我做了以下事情:
double[]copya=a;
copya[0]=10;
它改变了原来的' a'同样。我需要{' a
'像:
a={1,2,3,4}
即使更新了副本。任何人都可以帮我解决这个问题吗?感谢。
答案 0 :(得分:2)
制作copy
时,您只创建了另一个参考变量,并为其指定了与a
相同的对象。现在,a
和copy
都引用相同的数组。
要复制数组的内容,您可以clone
。
double[] copy = a.clone();
它是一个浅层副本,但对于原始值,这将工作得很好。
答案 1 :(得分:1)
使用零复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度。对于在原始数组和副本中都有效的所有索引,这两个数组将包含相同的值。对于在副本中有效但不在原始副本中的任何索引,副本将包含0d。当且仅当指定的长度大于原始数组的长度时,这些索引才会存在。
答案 2 :(得分:0)
编辑:根据您在@Edward Samson的评论部分中添加的答案,下面是一个执行“深度复制”的方法"二维数组:
public static double[][] deepCopy(double[][] original) {
if (original == null) return null;
double[][] result = new double[original.length][];
for (int i = 0; i < original.length; i++) {
System.arraycopy(original[i], 0, result[i], 0, original[i].length);
}
return result;
}
原始回答:
除a.clone()
和Arrays.copyOf(double, int)
外,您还可以选择使用System.arrayCopy(Object src, int srcPos, Object dest, int destpos, int length)
。
Javadoc如下:
[System.arrayCopy]将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。数组组件的子序列从src引用的源数组复制到dest引用的目标数组。复制的组件数等于length参数。源数组中位置srcPos到srcPos + length-1的组件分别被复制到目标数组的destPos到destPos + length-1的位置。
示例用法可能如下所示:
public static void main(String[] args)
{
int[] first = {1, 2, 3, 4, 5, 6};
int[] second = {0, 2, 4, 6, 8, 10};
// Copy two elements from arr1 starting from the second element
// into arr2 starting at the fourth element:
System.arraycopy(
first, // From the first array
1, // Starting from the second element
second, // To the second array
3, // Starting at the fourth element
2 // Copy two elements
);
}
输出(second
)为{0, 2, 4, 2, 3, 10}
[来自http://msdn.microsoft.com/en-us/library/aa989638(v=vs.80).aspx]
的示例