我一直在我的项目中使用ArrayLists,我需要创建一个默认的ArrayList,这样我就可以随时重置原始的ArrayList.因此,我复制原始的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();
}
Run Code Online (Sandbox Code Playgroud)
注意:我不知道它背后的原因是否可能,但ArrayList listaCompartimentos有一个listaEquipamentos.对于每个"Compartimento",都有一个ArrayList"listaEquipamentos".
克隆意味着您有2个不同的列表,但它们的内容是相同的.如果更改第一个列表中对象的状态,它将在第二个列表中更改.
使用copy-constructors并避免clone():
new ArrayList(originalList)
应避免使用arraylists的Clone(),因为即使它创建了一个新实例,它也会保留相同的元素.因此,在列表上更改的元素将在第二个上更改.
下面的代码将创建一个包含新元素的新实例.
ArrayList<Object> clone = new ArrayList<Object>();
for(Object o : originalList)
clone.add(o.clone());
Run Code Online (Sandbox Code Playgroud)