接收一个arraylist的内容到另一个arraylist然后清空第一个arraylist

时间:2013-08-07 16:16:35

标签: java list arraylist

我希望将arraylist array1的内容收到arraylist array2,然后清空array1的内容:

    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。它是否会被从两个地方删除,因为它仍然在内存中?

怎么能以正确的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

array1.clear()将arraylist中包含的所有对象设置为null。但是这并不能确保arraylist中包含的所有对象都被垃圾收集。除非删除所有引用,否则在其他地方引用的对象将不会被GC。

并且array1= null只是将其引用设置为null,并且在引用它之前不会进行垃圾收集,并且其中包含的对象也将如上所述进行GC。

因为您永远不知道GC何时完成,因此您无法通过将对象设置为null来强制GC。当对象超出范围时,对象将获得GCed。

尝试使用array1= null ..

或者对于复制,您也可以使用clone方法

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

答案 1 :(得分: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;

希望这有帮助。