java - 将 ArrayList 元素克隆到同一个 ArrayList

标签 java arraylist clone

我有一个包含对象的ArrayList。 (这个对象是类,每个对象都包含非常多的信息,正是这些对象代表了大型发电机,所以逐个复制属性是不可行的)。

示例:

ArrayList arr = {ob1, ob2, ob3, ob4, ob5}

所以我尝试做的是将对象(ob1)克隆到位置5。

arr.set(4, arr.get(0));

但不知怎的,这样做,ob5不是ob ob1的副本,它是ob1,所以如果我改变ob5,ob1也会改变。

这是 ArrayList 固有的东西吗? 如果我使用列表来代替,有什么区别吗?

最佳答案

ArrayList保存引用是的。但您可以克隆它(注意!但这将是浅拷贝 - 它不会克隆内部对象 https://stackoverflow.com/a/13434779/1111527 )

private class JustToCheck implements Cloneable {

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

然后像这样使用

JustToCheck ob1 = new JustToCheck();
JustToCheck ob2 = ob1;

List<JustToCheck> arr = new ArrayList<JustToCheck>();
arr.add(ob1);
arr.add(ob2);

System.out.println(arr.get(0).toString() + ": " + arr.get(1).toString());

try {
    arr.set(1, (JustToCheck) ob1.clone());
} catch (CloneNotSupportedException e) {
    e.printStackTrace();
}

System.out.println(arr.get(0).toString() + ": " + arr.get(1).toString());

输出为

example$JustToCheck@1c39a2d: example$JustToCheck@1c39a2d
example$JustToCheck@1c39a2d: example$JustToCheck@bf2d5e


PS - 我已在答案 https://stackoverflow.com/a/13434813/1111527 中检查了该问题

有一些不可变的类

Java6

String a = new String("a");
String b = a;
b += "b"; 
System.out.println("a = " + a); // a = a
System.out.println("b = " + b); // b = ab

关于java - 将 ArrayList 元素克隆到同一个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13434737/

相关文章:

java - 我如何从 PLSQL 中获取表用户定义的类型作为输出参数?

java - 将java代码重写为groovy代码

java - 驱动程序类中的数组列表方法不起作用

c# - ArrayList 与 List<object>

generics - 如何在不使用克隆的情况下编写保持状态并返回值的通用迭代器?

python - 如何克隆列表以使其在分配后不会意外更改?

java - 如何取消捕捉到的异常

java - 使用包含运算符的字符串作为 if 语句中的变量

java - 如何在文件加载时保持 Java FXML Activity

clone - vmrun 克隆 "The snapshot already exists"