我希望将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
。它是否会被从两个地方删除,因为它仍然在内存中?
怎么能以正确的方式做到这一点?
答案 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;
希望这有帮助。