gpt4 book ai didi

java - 设置不总是使用的 ArrayList 的初始容量的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-02 12:51:28 24 4
gpt4 key购买 nike

我有一些类具有仅有时使用的 ArrayList 字段。我通常像这样初始化这些字段:

private List<Widget> widgets = new ArrayList<>();

我了解using the overload constructors设置初始容量,所以我想知道是否应该这样声明这些字段:

private List<Widget> widgets = new ArrayList<>(0);

困境是,如果我用 0 初始化列表,那么列表总是必须重新初始化自身才能添加一个项目。但是,如果我使用默认构造函数(默认容量为 10),那么我可能会有一堆(可能有很多)项目因未使用的容量而浪费内存。

我知道你们中的一些人会反问“多久一次”和“您期望有多少件商品”,但我真的在寻找“最佳实践”方法。在所有条件都相同的情况下,是否应该在有时使用的列表上使用 (0)() 进行初始化?

我们部门的政策是始终初始化列表,因此我可能不会简单地将列表保留为null,此外,这只会回避问题。

最佳答案

过早的优化是万恶之源。 -D.高德纳。

这看起来像是一种“性能问题”,实际上对性能没有任何影响。一方面,您如何确定这些空列表实际上已初始化?我怀疑大多数现代编译器都会延迟对象的初始化,直到它们确定会调用它们为止。因此,如果您传递无参数构造函数,除非将某些内容添加到列表中,否则它很可能永远不会被使用。另一方面,如果您使用 0 参数构造函数,它保证必须调整它使用的每个参数的大小。

这是性能优化的三大定律

  1. 永远不要假设您知道编译后的代码实际上在做什么,或者您可以比编译器更好地进行小的优化。
  2. 在不使用分析器找出瓶颈所在的情况下,切勿进行优化。如果您认为自己知道,请参阅规则 (1)。
  3. 除非您的应用程序存在性能问题,否则请勿打扰。则参照规则(2)。

如果您仍然相信自己了解编译器,请查看这个问题:Why is it faster to process a sorted array than an unsorted array?

关于java - 设置不总是使用的 ArrayList 的初始容量的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23084363/

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