2013-11-26 34 views
0

我正在使用Java進行編程,在清理之前我想先備份一個ArrayList 不幸的是,在我撥打clear()之後,備份也被清除了。 我該如何解決這個問題?我在調用.clear()之後如何獲取Java中ArrayList的備份?

我的程序如下:

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... 

} 

} 
+1

爲什麼要在每次迭代時清除列表?你到底想做什麼? –

+1

這是我目前正在研究的另一個程序的一個示例,我只包含了它的一小部分,即時通訊程序我在每次迭代中將真正的程序連接在一個單一的數組列表中,之後我將它們全部清除爲了再次填充它們的值 – programmer

回答

2

清除你的備份列表的原因是在java中,所有變量都是引用。這意味着行BACKUPArrayList = AL;不會將AL的內容複製到BACKUPArrayList,但會使變量(不是對象!)BACKUPArrayList引用AL。因此ALBACKUPArrayList在分配之後引用相同的列表。

要解決這個問題,只需撥打BACKUPArrayList.addAll(AL);即可。此行將添加ALBACKUPArrayList的所有元素。另請參閱:http://docs.oracle.com/javase/7/docs/api/java/util/AbstractList.html

2

做好備份通過克隆原始數組列表

BACKUPArrayList = AL.clone(); 
4

與收藏嘗試複製:

Collections.copy(arrayList2,arrayList1); 
相關問題