1

我一直在我的一个项目中使用 ArrayLists,我需要创建一个默认的 ArrayList,这样我就可以随时重置原始的。所以,我复制了原始的 ArrayList 来创建默认的。但是,每当我修改原始文件时,它也会更改默认值。如何使副本“静态”且不可更改?

这是我的代码:(它是葡萄牙语)

private ArrayList<Compartimento> listaCompartimentos;
private ArrayList<Compartimento> listaCompartimentosDEFAULT;

public Simulador() {
        this.listaCompartimentos = new ArrayList<>();
        this.listaCompartimentosDEFAULT=new ArrayList<>();
    }

//Copy of the array
public void gravarListaDefault(){
        this.listaCompartimentosDEFAULT=(ArrayList<Compartimento>)listaCompartimentos.clone();
    }

注意:我不知道这是否是它背后的原因,但 ArrayList listaCompartimentos 有一个 listaEquipamentos。对于每个“Compartimento”,都有一个 ArrayList“listaEquipamentos”。

4

3 回答 3

5

clone()应该避免使用 for ,ArrayLists因为即使它创建了一个List实例,它也包含相同的元素。因此,在第一个更改的元素List也将在第二个更改。两个不同的对象持有相同的引用。

下面的代码将创建一个带有新元素的新实例。

ArrayList<Object> realClone = new ArrayList<Object>();
for(Object o : originalList)
   realClone.add(o.clone());
于 2013-05-15T10:42:42.337 回答
2
this.listaCompartimentosDEFAULT = new ArrayList<Compartimento>(
            listaCompartimentos);
于 2013-05-15T10:42:50.190 回答
2

我会建议clone每个对象。让你的Compartimento类实现Cloneable。并克隆 中的每个对象List并添加到另一个List

for(Compartimento c : this.listaCompartimentos) {
    this.listaCompartimentosDEFAULT.add(c.clone());
}
于 2013-05-15T11:04:27.530 回答