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. 为什么指定初始容量
指定初始容量的初始化方式并不会减少扩容次数,但在某些场景下可以提高效率。如果我们能够预估集合的大致大小,指定一个初始容量可以避免多次扩容操作,从而提高性能。
备注
备注: 关注站长获取更多详情。
正文到此结束
- 本文标签: Java 面试题
- 本文链接: https://www.jietongc.com/article/339
- 版权声明: 本文由大熊科技原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权