ArrayList 与 Array 中的元素是如何分配的?[复制]

How are elements allocated in ArrayList vs Array? [duplicate]

提问人:tycoon 提问时间:10/5/2020 最后编辑:Mark Rotteveeltycoon 更新时间:10/5/2020 访问量:82

问:

根据我正在读的一本书

数组列表的容量之间有一个重要的区别 以及数组的大小。如果分配一个包含 100 个条目的数组, 然后阵列有 100 个插槽,可供使用。带有 100 个元素的容量具有容纳 100 个元素的潜力 (事实上,超过 100 个,代价是额外的重新分配)—— 但是在开始时,即使在初始构造之后,数组列表 根本没有元素。

但是,我们也可以在不定义任何容量的情况下创建一个 ArrayList。

一个没有定义任何容量的 ArrayList 和一个有容量的 ArrayList 将如何分配其元素,以及我们何时应该使用一个元素?

唯一让我印象深刻的是,如果以两种方式(具有容量的 ArrayList 和没有容量的 ArrayList)来处理这些值,为什么我们会有容量,所以在我看来,唯一可能的原因是它们都持有不同的值。

Java 数组 ArrayList

评论

0赞 10/5/2020
“但是,没有定义任何容量的 ArrayList 如何”< - 它不能。如果您自己不指定初始容量,则只会使用其初始容量的默认值。但这种初始能力总是被定义并存在的。
4赞 Federico klez Culloca 10/5/2020
一个(不出所料)由一个数组支持。主要区别在于,您不需要关心该阵列的管理方式。但它有管理的。它确实具有初始容量,并且在需要时确实会增长。您可以查看 ArrayList 的源代码。这很容易理解。ArrayList
1赞 GhostCat 10/5/2020
请注意,ArrayList 是 List 接口的特定实现。所以:不要假设这个实现可能是什么样子的。取而代之的是:看看相应的源代码!
0赞 fps 10/5/2020
我认为,除了具有容量的默认初始值(此值为 10,顺便说一句)之外,还会延迟数组的分配,直到添加第一个元素。您应该检查源代码以深入了解这些详细信息ArrayListArrayList
1赞 10/5/2020
@tycoon:请参阅为什么要启动具有初始容量的 ArrayList?

答:

0赞 MarkAddison 10/5/2020 #1

提供初始分配的原因是预先分配保存该多个项目所需的内存表示形式,否则所有添加的项目都需要动态分配。请注意,一旦数组包含预分配项的数量,动态分配就变得必要。