原创

ArrayList初始化解析:默认方式与指定初始容量有何不同?


在Java编程中,ArrayList是一种常用的动态数组,但对于初学者来说,对其初始化和扩容机制可能存在疑惑。本教程将详细解释ArrayList的初始化方式和扩容机制,为初学者提供清晰的指导。

I. ArrayList的初始化方式

1. 默认初始化

ArrayList<Object> list = new ArrayList<>();

上述代码通过无参构造函数创建了一个默认初始容量为10的ArrayList。这意味着,在初始时,ArrayList底层的数组大小为10。当元素个数超过10时,ArrayList会进行扩容,扩容大小为当前容量的1.5倍。

2. 指定初始容量的初始化

ArrayList<Object> list = new ArrayList(20);

在这个示例中,通过带有参数的构造函数指定了ArrayList的初始容量为20。然而,这并不会导致ArrayList在创建时就分配一个大小为20的底层数组,而只是表示在添加元素时,当元素个数超过20时,才会进行扩容。因此,初始容量只是一个预设,并不意味着底层数组已经存放了20个元素。

II. 扩容机制

无论是默认初始化还是指定初始容量的初始化,ArrayList的扩容机制都是一样的。当元素个数超过当前容量时,ArrayList会进行扩容。

示例代码

import java.util.ArrayList;
public class ArrayListDemo { public static void main(String[] args) { // 默认初始化 ArrayList<String> defaultList = new ArrayList<>(); defaultList.add("Element 1"); defaultList.add("Element 2"); defaultList.add("Element 3"); // 当添加第4个元素时,会触发扩容 defaultList.add("Element 4");
// 指定初始容量的初始化 ArrayList<String> customList = new ArrayList<>(20); customList.add("Element 1"); customList.add("Element 2"); customList.add("Element 3"); // 当添加第4个元素时,会触发扩容 customList.add("Element 4"); }}

通过上述示例,我们可以观察到在添加第4个元素时,无论是默认初始化还是指定初始容量的初始化,ArrayList都会触发扩容操作。

III. 为什么指定初始容量

指定初始容量的初始化方式并不会减少扩容次数,但在某些场景下可以提高效率。如果我们能够预估集合的大致大小,指定一个初始容量可以避免多次扩容操作,从而提高性能。


备注

备注: 关注站长获取更多详情。

file
file
正文到此结束
本文目录