在调用.clear()之后,如何在Java中备份ArrayList?
我正在用Java编程,我想在清理它之前备份一个ArrayList
不幸的是,在我调用clear()
,也会清理备份。 我怎么解决这个问题?
我的计划如下:
public class Main { public static void main(String args[]) { ArrayListMethod ALM = new ArrayListMethod(); ALM.FillArrayList(); } }
import java.util.ArrayList; public class ArrayListMethod { public void FillArrayList() { ArrayList AL; AL = new ArrayList(); ArrayList BACKUPArrayList = new ArrayList(); for(int i = 0 ; i <= 5; i++) { AL.add(i); BACKUPArrayList = AL; System.out.println(" ARRAY LIST BEFORE CLEAR " + AL); AL.clear(); } System.out.println(" BACK UP LIST AFTER CLEAR" + BACKUPArrayList); //Unfortunately the BACKUPArrayList is cleaned as well... } }
清理备份列表的原因是在java中所有变量都是引用。 这意味着行BACKUPArrayList = AL;
不会将AL
的内容复制到BACKUPArrayList
但会使变量(不是对象!) BACKUPArrayList
引用AL
。 因此AL
和BACKUPArrayList
在该赋值后引用相同的列表。
要解决这个问题,只需调用BACKUPArrayList.addAll(AL);
。 该行将AL
所有元素添加到BACKUPArrayList
。 另见: http : //docs.oracle.com/javase/7/docs/api/java/util/AbstractList.html
尝试使用集合副本:
Collections.copy(arrayList2,arrayList1);
通过克隆原始arrays列表进行备份
BACKUPArrayList = AL.clone();