java - 如何在 Java 中制作 ArrayList<Integer> 的深层复制?

标签 java arraylist deep-copy

我基本上只是想对 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/

相关文章:

java - 对于一种测试方法,是否有 JUNIT 注释可以在方法之后跳过?

java - 房间: Use class that extends ArrayList as Entity

java - 在类 Test 中实例化类 Test 的成员是递归吗?

java - 如何将 List<List<String>> 转换为 String[][]?

java - ArrayList<>,在创建另一个对象时添加对象

JavaScript:深度复制 Image() 对象

python - 嵌套字典 copy() 或 deepcopy()?

java - Minecraft Bukkit 1.8 将列表保存到 config.yml 中

android - 将 ArrayAdapter 转换为 List<String>

python - 如何深复制列表?