我有一些数据存储为ArrayList
.当我想备份这些数据时,java会永远绑定两个对象.这意味着当我更改数据中的值时,ArrayList
此更改将进入备份.我试图将数据中的值分别复制到循环中的备份,尝试使用方法data.clone()
- 没有任何帮助.
你的问题不是很清楚.如果你克隆()一个ArrayList,如果你改变原始内容(即你添加或删除元素),克隆将不会被修改,但它是一个"浅拷贝",所以如果你改变原始的实际对象,他们将也可以在克隆中进行更改.
如果要进行"深层复制",以便对实际对象的更改不会影响它们在克隆中的备份,那么您需要创建一个新的ArrayList,然后通过原始对象和每个元素,克隆进入新的.如在
ArrayList backup = new ArrayList(); for (Object obj : data) backup.add(obj.clone());
我认为你需要.clone()
个别对象.克隆ArrayList
不是"深层"; 它只会克隆对象的引用.
我假设data
是ArrayList
你要备份的名字.如果是这样,你应该知道它clone
不是很深 - 它只创建一个调用它的对象的副本,在这种情况下是列表.如果它是深度克隆,它将用新的列表填充其中的对象的克隆.
由于它不深,如果更改列表包含的对象,则备份列表也会显示这些更改,因为它包含相同的对象.更改"当前"列表后,唯一一次看不到备份中的更改是在当前列表中添加或删除对象时.
有些类可以覆盖clone
深层次,但不是全部.一般来说,这不是你可以依赖的东西.在创建Java集合的备份副本时,请记住要么克隆包含的对象,要么只处理不可变对象的集合.