gpt4 book ai didi

java - 重新实例化 List 或调用 clear() 的更好做法

转载 作者:IT老高 更新时间:2023-10-28 20:58:35 24 4
gpt4 key购买 nike

使用 Java (1.6) 是调用 List 上的 clear() 方法还是重新实例化引用更好?

我有一个 ArrayList,其中填充了未知数量的对象并定期“刷新” - 处理对象并清除列表。一旦刷新,列表就会再次被填满。刷新发生在随机时间。列表中的数字可能很小(10 个对象)或很大(数百万个对象)。

那么“flush”调用 c​​lear() 还是 new ArrayList() 更好?

是否值得担心这类问题,还是应该让 VM 担心?我怎样才能查看 Java 的内存占用量来为自己解决这种问题?

非常感谢任何帮助。

最佳答案

要关注的主要是other 代码可能对列表有引用。如果现有列表在其他地方可见,您希望该代码看到一个已清除的列表,还是保留现有列表?

如果没有其他人可以看到该列表,我可能会清除它 - 但不是出于性能原因;只是因为您描述操作的方式听起来更像是清除而不是“创建新列表”。

ArrayList<T>文档没有说明底层数据结构会发生什么,但是查看 Eclipse 中的 1.7 实现,看起来您应该调用 trimToSize()clear() 之后- 否则您仍然可以拥有一个由大量空引用支持的列表。 (也许这对你来说不是问题,当然......也许这比随着大小再次增加而不得不复制数组更有效。你会比我们更了解这一点。)

(当然,创建一个新列表不需要旧列表将所有数组元素设置为 null……但我怀疑这在大多数情况下是否重要。)

关于java - 重新实例化 List 或调用 clear() 的更好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com