【发布时间】:2017-04-07 13:07:40
【问题描述】:
我尝试了很多方法,但是如果我对一个副本进行任何更改,这些更改会反映在另一个副本中。我也尝试过深拷贝,但没有结果,请帮忙。
我的深拷贝方法:
public static ArrayList<Integer> cloneList(ArrayList<Integer> list) {
ArrayList<Integer> clone = new ArrayList<Integer>(list.size());
for (int i=0;i<list.size();i++){
clone.add(list.get(i));
}
return clone;
}
Small Change:这是对复制的arraylist进行更改时使用的方法
public static ArrayList<Integer>smallChange(ArrayList<Integer>oldArray){
int firstNo;
int secondNo;
do{
Random rand1 = new Random();
Random rand2 = new Random();
firstNo = (int) Math.abs(matrix_length*rand1.nextDouble());
System.out.println("A: "+firstNo);
secondNo = (int) Math.abs(matrix_length*rand2.nextDouble());
System.out.println("B: "+secondNo);
}while(firstNo == secondNo);
int temp1 = oldArray.indexOf(firstNo);
int temp2 = oldArray.indexOf(secondNo);
oldArray.set(temp1, secondNo);
oldArray.set(temp2,firstNo);
ArrayList<Integer> newArrayList = oldArray;
return newArrayList;
}
【问题讨论】:
-
其中一个的变化不可能反映在另一个中:整数对象是不可变的:stackoverflow.com/questions/4117793/…
-
@PatrickFerreira 不存在
ArrayList<int> -
这并不痛苦。
new ArrayList<Integer>(list)是复制列表所需的全部内容。 -
@efekctive 不变性确实与 更改 是否可以反映在其他引用中有关。
-
@RishiKapadia 关于更新:您正在修改旧的 arrayList,我不知道您在期待什么