我尝试过多种方式但是如果我对一个副本进行任何更改,那么这些更改会反映在另一个副本中。我也试过深度复制,没有结果请帮忙。
我的深层复制方法:
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;
}
小变化:这是对复制的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;
}
答案 0 :(得分:0)
是否可以创建整数数组列表的独立副本 在java?
你可以这样做:
public static ArrayList<Integer> cloneList(ArrayList<Integer> list) {
return new ArrayList<Integer>(list);
}
答案 1 :(得分:0)
尝试使用Collections.copy方法。
public static void copy(List dest, List src)
答案 2 :(得分:0)
如果我理解你真正要做的事情(创建一个随机小改动的新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);
ArrayList<Integer> newArrayList = new ArrayList<>(oldArray);
int temp1 = newArrayList.indexOf(firstNo);
int temp2 = newArrayList.indexOf(secondNo);
newArrayList.set(temp1, secondNo);
newArrayList.set(temp2,firstNo);
return newArrayList;
}
这是一个复制列表然后修改副本的例子:
import java.util.*;
public class HelloWorld{
public static void main(String []args){
List<Integer> list1= new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
List<Integer> list2= new ArrayList<>(list1);
list2.set(1,6);
System.out.println(list1);
System.out.println(list2);
}
}
答案 3 :(得分:-1)
您可以使用Collections类的unmodifiableList方法,它至少会停止在列表对象中的修改,该列表对象在Collections类的unmodifiableList方法中作为参数传递。
public List<String> getList(List<String> alist) {
List<String> list = new ArrayList<String>(alist);
List<String> unmodifiableList = Collections.unmodifiableList(list);
return unmodifiableList;
}