2013-08-07 105 views
0

我希望收到該ArrayList array1的內容轉換成ArrayList中array2然後清空陣列1的內容:接收一個ArrayList中的內容到另一個,然後清空第一個

public ArrayList array1 = new ArrayList(); 
    public ArrayList array2 = new ArrayList(); 

    /* array1 contains data and array2 is empty*/ 

    array2.addAll(array1); 
    array1.clear(); 
    System.out.println(array2); 

這個問題我有array2爲空[]

當我刪除行array1.clear();,它很好用,array2顯示內容[a1, a2, a3]

我想當array2收到array1的內容我們可以清除array1沒有問題。它是否都從內存中刪除,因爲它全部仍在內存中?

如何才能做到正確的方式?

+0

大多數時候你不應該試圖像這樣管理內存。在狹窄範圍內正確使用OOP並讓JVM爲您做垃圾回收。 – roippi

+1

調用'array1.clear()'不應該在這裏以任何方式影響'array2'。 – arshajii

+0

在調用'allAll'之前,你確定'array1'不是空的?你能提供你填充'array1'的方式嗎? – sp00m

回答

1

array1.clear()將數組列表中包含的所有對象設置爲null。但這並不能確保數組列表中包含的所有對象都將被垃圾收集。在其他地方引用的對象將不會被GCed直到所有引用被刪除。

array1= null只是將其引用設置爲null,並且不會被垃圾收集,直到引用它爲止,並且其中包含的對象也將如上所述被GCed。

由於您永遠不會知道GC何時完成,因此您無法通過將對象設置爲null來強制GC。當對象超出範圍時,對象將被GCed。

嘗試使用array1= null ..

或者拷貝你也可以使用clone方法

array2= (ArrayList<Object>)array1.clone(); 
+0

感謝它與克隆()和設置數組爲null – dzwowt

+0

它工作正確?我的榮幸.. –

+0

是的,我收到了另一個包含數組列表的數組列表,我會盡量使它與相同的指令一起工作,或者更糟的是在這裏發佈一個新線程。 – dzwowt

0

是否會被從兩個地方刪除,因爲這一切都仍在內存?

 // Will do a Shallow Copy. Will not reference a1 in anyway. 
     array2 = (ArrayList)array1.clone(); 

     // The object is still alive and holds a reference.   
     array1.clear(); 

     // Once array1 = null, it will be eligible for Garbage Collection. 
     array1 = null; 

希望這有助於。

+0

感謝您的回答! – dzwowt

相關問題