关于列表的性能提示

时间:2012-07-02 14:53:05

标签: java

  

可能重复:
  list.clear() vs list = new ArrayList<int>();

我有一个清单:

List<Integer> l1  = new ArrayList<Integer>();

并在该列表中添加了一些整数变量。经过一些操作后,我需要重用该列表,因此我将其设置为null

哪个更好,设置为null或使用.clear()?或者还有另一种方式吗?

5 个答案:

答案 0 :(得分:2)

  1. l1 = null将销毁对列表对象的引用,它将被垃圾收集(假设没有其他对List的引用)。

  2. l1.clear()将迭代整个列表并清除其所有值(即将每个索引处的对象设置为null)。

  3. 第一个不需要遍历整个列表,因此通常更快。如果出于某种原因需要重用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()

更快