在调用.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 。 因此ALBACKUPArrayList在该赋值后引用相同的列表。

要解决这个问题,只需调用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();