我基本上只是想对 1 和 0 进行深层复制,所以我可以使用 boolean 值,但我想知道如何对整数进行一般操作。
private ArrayList<Integer> makeDeepCopyInteger(ArrayList<Integer> a) {
ArrayList<Integer> newA = new ArrayList<>(a.size());
for (int i = 0; i < a.size(); i++) {
int newInt = 0;
if (a.get(i) == 1) {
newInt = 1;
}
newA.add(newInt);
}
return newA;
}
最佳答案
clone()
方法受 Integer
类保护,因此您无法在该类之外调用 Integer.clone()
。您可以做的是创建一个新
整数。
private ArrayList<Integer> makeDeepCopyInteger(ArrayList<Integer> old){
ArrayList<Integer> copy = new ArrayList<Integer>(old.size());
for(Integer i : old){
copy.add(new Integer(i));
}
return copy;
}
您可以通过执行以下操作来测试这是否有效:
public static void main (String[] args) throws java.lang.Exception
{
ArrayList<Integer> arr = new ArrayList<>();
for(int i = 0; i<5; i++){
arr.add(new Integer(i));
}
ArrayList<Integer> x = makeDeepCopyInteger(arr);
for(int i = 0; i<x.size(); i++){
if(arr.get(i) == x.get(i)){
System.out.println("Same object");
} else {
System.out.println("Not the same object");
}
}
}
测试
Integer a = new Integer(1);
Integer b = new Integer(a);
System.out.println(a==b); // true
System.out.println(System.identityHashCode(a) == (System.identityHashCode(b))); // false;
Integer a = new Integer(1);
Integer b = a;
System.out.println(a==b); // true
System.out.println(System.identityHashCode(a) == (System.identityHashCode(b))); // true
因此,从我的测试来看,要创建一个新的引用来复制到新数组,您应该使用new Integer()
。 Integer
是一个不可变对象(immutable对象),但当 Integer
的值发生变化时,该引用也会发生变化。
关于java - 如何在 Java 中制作 ArrayList<Integer> 的深层复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42067086/