0

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

如何以正确的方式做到这一点?

4

2 回答 2

1

array1.clear()将 arraylist 中包含的所有对象设置为 null。但这并不能确保 arraylist 中包含的所有对象都会被垃圾回收。在移除所有引用之前,不会对在别处有引用的对象进行 GC。

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

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

尝试使用array1= null..

或者复制你也可以使用clone方法

array2= (ArrayList<Object>)array1.clone();
于 2013-08-07T16:22:26.400 回答
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;

希望这可以帮助。

于 2013-08-07T16:39:51.817 回答