gpt4 book ai didi

java - 在java中声明列表的初始容量是一种糟糕的技术吗?

转载 作者:行者123 更新时间:2023-12-02 04:34:22 25 4
gpt4 key购买 nike

我有多个具有相同容量的ArrayList。我通过读取文件来填充这些列表。

我知道Array和ArrayList之间的一个区别是Array具有固定容量,而ArrayList具有可变容量。您应该在声明数组时显式指定数组长度,但 ArrayList 在变满时会自行调整大小。

ArrayList 中的任何调整大小操作都会降低性能,因为它涉及创建新数组并将内容从旧数组复制到新数组。因此我想:

A - 使用第一个的容量显式初始化 ArrayList 的其余部分,因此这些列表不必调整自身大小并将旧数组元素复制到新数组元素,或者,

B - 我可以放弃其余的列表,我只声明第一个列表,其余的将是具有 ArrayList 长度的数组。

示例:

答:

static ArrayList<ObjectType> list1 = new ArrayList<>();
ArrayList<ObjectType> list2 = new ArrayList<>(list1.size());
ArrayList<ObjectType> list2 = new ArrayList<>(list1.size());
...

B:

static ArrayList<ObjectType> list1 = new ArrayList<>();
ObjectType[] array1 = new ObjectType[list1.size()];
ObjectType[] array2 = new ObjectType[list1.size()];
ObjectType[] array3 = new ObjectType[array1.length];
...

问题是:

A 示例是一种糟糕的编程技术吗?但是 B 的例子呢?

使用哪个示例更好?

最佳答案

创建具有初始容量的 ArrayList 根本不是一个坏技术。事实上,它会给您带来更好的性能,因为当您不断向列表添加元素时,它不必在每次大小已满时重新分配内存并复制现有内容。

来自Java docs ,

Each ArrayList instance has a capacity. The capacity is the size of the array used to store the elements in the list. It is always at least as large as the list size. As elements are added to an ArrayList, its capacity grows automatically. The details of the growth policy are not specified beyond the fact that adding an element has constant amortized time cost.

An application can increase the capacity of an ArrayList instance before adding a large number of elements using the ensureCapacity operation. This may reduce the amount of incremental reallocation.

关于java - 在java中声明列表的初始容量是一种糟糕的技术吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31017405/

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