【发布时间】:2009-05-05 22:43:31
【问题描述】:
我浏览了 Java 文档,发现了 ArrayLists 的 clear() 方法。
与简单地将新的 ArrayList 对象重新分配给变量相比,这样做有什么用?
【问题讨论】:
-
注意 clear() 方法是由 Collection 定义的。它也出现在地图界面中。
标签: java memory-management arraylist
我浏览了 Java 文档,发现了 ArrayLists 的 clear() 方法。
与简单地将新的 ArrayList 对象重新分配给变量相比,这样做有什么用?
【问题讨论】:
标签: java memory-management arraylist
因为可能对一个列表有多个引用,所以清除它可能比重新分配所有引用更可取和/或更实用。
如果您大量清空数组(例如,在一个大循环内),那么创建大量临时对象是没有意义的。当然垃圾收集器最终会清理它们,但如果你不必这样做,那么浪费资源是没有意义的。
而且因为清除列表的工作量比创建新列表要少。
【讨论】:
你可能有一个 final 字段(类变量)List:
private final List<Thing> things = ...
你想在课堂上的某个地方清除(删除所有)东西。由于things 是最终的,因此无法重新分配。此外,您可能不想重新分配新的 List 实例,因为您已经实例化了一个完美的 List。
【讨论】:
想象一下,在整个代码中有多个引用相同java.util.ArrayList 的情况。创建列表的新实例并分配给所有变量几乎是不可能或非常困难的。但是java.util.ArrayList.clear() 可以解决问题!
【讨论】:
如果您的目标是真正清除,则清除的费用比创建新对象的费用要少。
重新分配引用不会清除对象。假设是如果没有其他对它的引用,它将很快被 GC 回收。否则,你只会把自己弄得一团糟。
【讨论】:
除了提到的原因之外,清除列表在语义上通常比创建新列表更正确。如果您想要的结果是清除列表,您应该采取的行动是清除列表,而不是创建新列表。
【讨论】:
clear() 不会重新分配新对象,因此对性能的影响较小。
【讨论】: