我有一个清单:
List<Integer> l1 = new ArrayList<Integer>();
并在该列表中添加了一些整数变量。经过一些操作后,我需要重用该列表,因此我将其设置为null
。
哪个更好,设置为null
或使用.clear()
?或者还有另一种方式吗?
答案 0 :(得分:2)
l1 = null
将销毁对列表对象的引用,它将被垃圾收集(假设没有其他对List
的引用)。
l1.clear()
将迭代整个列表并清除其所有值(即将每个索引处的对象设置为null
)。
第一个不需要遍历整个列表,因此通常更快。如果出于某种原因需要重用List
对象,则应使用l1.clear()
从列表中删除对象。
答案 1 :(得分:2)
l1 = null;
为l1
变量指定null。如果列表之前已存储在另一个对象中,则此另一个对象仍具有对该列表的引用,因此仍可访问存储在此列表中的所有元素。如果以前由l1
引用的List对象不再可访问,则将对其进行垃圾回收。其元素相同:如果它们不再可用,它们将被垃圾收集。
l1.clear();
非常不同:它会从列表中删除所有元素。如果列表之前已存储在另一个对象中,则此另一个对象具有对您刚刚清除的列表的引用,因此无法访问已存储在列表中的元素(因为您已将其删除)。如果先前存储在列表中的元素不再可访问,则它们将被垃圾收集。列表不会,因为你保留了对它的引用(l1
)。
因此,如果您想重用变量,但希望按原样保留List Object ,则应使用l1 = null
。如果要从列表中删除所有元素,则应使用l1.clear()
。
答案 2 :(得分:0)
您是要尝试清除列表中的内容,还是使用新维度,新数组重新开始? Just Garbage收集数组并调用l1 = new Array();并且您将生成一个具有空值的新数组,而不是通过并尝试清除整个列表。
答案 3 :(得分:0)
如果您使用的是LinkedList
,那么clear()
也会非常快速和迭代。但是单一访问会更慢。您的选择取决于用例......
答案 4 :(得分:0)
如果将其设置为null
,则必须在使用之前再次初始化它。所以我会这样做:
l1 = new ArrayList<Integer>();
我认为这比调用.clear()