Java 如何制作数组的副本,使副本中的任何更改都不会';不影响原来的吗?
我需要在循环中每次调用一个数组,并将其用作另一个方法的输入。然后根据该方法的输出,我需要更新该数组的副本,并在更改后将副本存储在Java 如何制作数组的副本,使副本中的任何更改都不会';不影响原来的吗?,java,Java,我需要在循环中每次调用一个数组,并将其用作另一个方法的输入。然后根据该方法的输出,我需要更新该数组的副本,并在更改后将副本存储在ArrayList中。例如: double[]a={1,2,3,4} 在方法中使用“a”作为输入后,我必须更新“a”并存储在数组列表中,但下次在循环中,我需要再次使用原始“a”。一旦我做了以下工作: double[]copya=a; copya[0]=10; public static void main(String[] args) {
ArrayList
中。例如:
double[]a={1,2,3,4}
在方法中使用“a
”作为输入后,我必须更新“a
”并存储在数组列表中,但下次在循环中,我需要再次使用原始“a
”。一旦我做了以下工作:
double[]copya=a;
copya[0]=10;
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
);
}
它也改变了原来的“a”。我需要一个“a
”,比如:
a={1,2,3,4}
即使在更新副本之后。有人能帮我解决这个问题吗?谢谢。制作
复制
时,您只创建了另一个参考变量,并将其分配给了与a
相同的对象。现在a
和copy
都引用相同的数组
要复制数组的内容,可以对其进行克隆
double[] copy = a.clone();
这是一个浅拷贝,但对于基本值,这将很好地工作。在制作
copy
时,您只创建了另一个引用变量,并将其指定给与a
相同的对象。现在a
和copy
都引用相同的数组
要复制数组的内容,可以对其进行克隆
double[] copy = a.clone();
这是一个浅拷贝,但对于基本值,这将很好地工作。在制作
copy
时,您只创建了另一个引用变量,并将其指定给与a
相同的对象。现在a
和copy
都引用相同的数组
要复制数组的内容,可以对其进行克隆
double[] copy = a.clone();
这是一个浅拷贝,但对于基本值,这将很好地工作。在制作
copy
时,您只创建了另一个引用变量,并将其指定给与a
相同的对象。现在a
和copy
都引用相同的数组
要复制数组的内容,可以对其进行克隆
double[] copy = a.clone();
这是一个浅拷贝,但对于基本值,它可以正常工作。使用
复制指定的数组,截断或填充零(如有必要),使副本具有指定的长度。对于在原始数组和副本中都有效的所有索引,这两个数组将包含相同的值。对于在副本中有效但在原件中无效的任何索引,副本将包含0d。当且仅当指定的长度大于原始数组的长度时,此类索引才会存在
使用
复制指定的数组,截断或填充零(如有必要),使副本具有指定的长度。对于在原始数组和副本中都有效的所有索引,这两个数组将包含相同的值。对于在副本中有效但在原件中无效的任何索引,副本将包含0d。当且仅当指定的长度大于原始数组的长度时,此类索引才会存在
使用
复制指定的数组,截断或填充零(如有必要),使副本具有指定的长度。对于在原始数组和副本中都有效的所有索引,这两个数组将包含相同的值。对于在副本中有效但在原件中无效的任何索引,副本将包含0d。当且仅当指定的长度大于原始数组的长度时,此类索引才会存在
使用
复制指定的数组,截断或填充零(如有必要),使副本具有指定的长度。对于在原始数组和副本中都有效的所有索引,这两个数组将包含相同的值。对于在副本中有效但在原件中无效的任何索引,副本将包含0d。当且仅当指定的长度大于原始数组的长度时,此类索引才会存在
编辑:根据您在@Edward Samson答案的评论部分添加的内容,下面是一种执行2D数组“深度复制”的方法:
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;
}
输出(对于秒
)为{0,2,4,2,3,10}
[示例来源于编辑:根据您在@Edward Samson答案的评论部分添加的内容,下面是一个执行2D数组“深度复制”的方法:
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;
}
输出(对于秒
)为{0,2,4,2,3,10}
[示例来源于编辑:根据您在@Edward Samson答案的评论部分添加的内容,下面是一个执行2D数组“深度复制”的方法:
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;
}
输出(对于秒
)为{0,2,4,2,3,10}
[示例来源于编辑:根据您在@Edward Samson答案的评论部分添加的内容,下面是一个执行2D数组“深度复制”的方法:
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;
}
输出(对于秒
)为{0,2,4,2,3,10}
[示例来源于注意数组和ArrayList是两种不同类型的集合。从问题的措辞来看,您可能会有点混淆。注意数组和ArrayList是两种不同类型的集合。从问题的措辞来看,您可能会混淆它们位。请注意数组和ArrayList是两种不同类型的集合。从问题的措辞来看,您可能会有点混淆。请注意数组和ArrayList是两种不同类型的集合。从问题的措辞来看,您可能会有点混淆。谢谢您的回答实际上,我的例子是我实际需要的简化版本。我的原始数组是从hashmap中提取的。然后这个数组作为另一个方法的输入。根据方法的输出,我需要更新