Java集合之ArrayList扩容机制底层源码探究

ArrayList底层源码探究扩容机制

先说结论:

如果new一个ArrayList时是调用无参构造函数默认是一个空数组,当需要进行扩容时

  1. 第一次先将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);
    }

跟入首先发现调用有参构造函数:
在这里插入图片描述
在这里插入图片描述
当首次超过初始化容量时:
在这里插入图片描述
源码验证成功!
希望能帮助到您,谢谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值