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);
}
跟入首先发现调用有参构造函数:
当首次超过初始化容量时:
源码验证成功!
希望能帮助到您,谢谢。