ArrayList底层源码探究扩容机制
先说结论:
如果new一个ArrayList时是调用无参构造函数默认是一个空数组,当需要进行扩容时
- 第一次先将ArrayList的容量扩大为10
2.容量不够时, 第二次进行扩容时就扩大至1.5倍
如果new一个ArrayList时是调用有参构造函数,则需要指定容量大小,则初始容量大小就是指定大小
- 当添加数据所需容量超过初始化时指定容量大小,就按照1.5倍进行扩容
源码探究
一、使用无参构造函数:
//调用无参构造函数
ArrayList arrayList = new ArrayList();
//进行第一次扩容
for (int i = 1; i <= 10; i++) {
arrayList.add(i);
}
//进行第二次扩容
for (int i = 11; i <= 20; i++) {
arrayList.add(i);
}
设置断点进行debug

跟入会发现进入ArrayList类中调用无参构造函数


进行第一次扩容:






ps:调用Arrays.copyOf()进行原数组扩容,保证数据不丢失
第一次扩容就结束了

进行第二次扩容:

前面部分一样,介绍不一样的那部分:



二、使用有参构造函数
//调用无参构造函数
ArrayList arrayList = new ArrayList(6);
for (int i = 1; i <= 6; i++) {
arrayList.add(i);
}
//进行扩容
arrayList.add(7);
}
跟入首先发现调用有参构造函数:


当首次超过初始化容量时:

源码验证成功!
希望能帮助到您,谢谢。

本文详细介绍了ArrayList在不同构造函数下的扩容机制。对于无参构造函数,初始为空数组,首次扩容至10个元素,之后每次扩容按1.5倍进行。对于有参构造函数,扩容直接按1.5倍进行。
875





