我有一个清单:
List<Integer> l1 = new ArrayList<Integer>();
并在该列表中添加了一些整数变量。经过一些操作后,我需要重用该列表,因此我将其设置为null
.
哪个更好,设置null
或使用.clear()
?还是有其他方法?
我有一个清单:
List<Integer> l1 = new ArrayList<Integer>();
并在该列表中添加了一些整数变量。经过一些操作后,我需要重用该列表,因此我将其设置为null
.
哪个更好,设置null
或使用.clear()
?还是有其他方法?
l1 = null
将破坏对列表对象的引用,并将被垃圾收集(假设没有其他对 的引用List
)。
l1.clear()
将迭代整个列表并清除其所有值(即将每个索引处的对象设置为null
)。
第一个不需要遍历整个列表,因此通常更快。如果出于某种原因需要重用该List
对象,则应使用l1.clear()
从列表中删除对象。
l1 = null;
将 null 分配给l1
变量。如果该列表之前已存储在另一个对象中,则该另一个对象仍然具有对该列表的引用,因此仍然可以访问存储在该列表中的所有元素。如果之前引用的 List 对象对象l1
不再可访问,它将被垃圾回收。它的元素也是如此:如果它们不再可访问,它们将被垃圾收集。
l1.clear();
非常不同:它从列表中删除所有元素。如果该列表之前已存储在另一个对象中,则此另一个对象具有对您刚刚清除的列表的引用,因此无法再访问存储在列表中的元素(因为您删除了它们)。如果之前存储在列表中的元素不再可访问,它们将被垃圾回收。该列表不会出现,因为您保留了对它的引用 ( l1
)。
因此,l1 = null
如果要重用变量,但要保持 List对象原样,则应使用 , 。l1.clear()
如果要从列表中删除所有元素,则应使用。
您是要清除列表的内容,还是从新维度、新数组重新开始?只是垃圾收集数组并调用 l1 = new Array(); 并且您将生成一个具有空值的新数组,而不是遍历并尝试清除整个列表。
如果您使用的是LinkedList
,clear()
将会非常快并且迭代也非常快。但是单次访问会慢一些。您的选择取决于用例...
如果将其设置为null
,则必须在使用前再次对其进行初始化。所以我会这样做:
l1 = new ArrayList<Integer>();
我认为这会比打电话更快.clear()