ArrayList中add方法源码分析

    当我们通过ArrayList的无参构造方法创建一个ArrayList对象时,ArrayList的无参构造方法会初始化一个数组类型的elementData成员变量,该成员变量就是ArrayList具体用来存放数据的变量,由此可知ArrayList是基于数组来实现的。

    当程序调用add方法向我们新建的集合类添加值的时候,添加方法会先调用ensureCapacityInternal方法,对集合容量进行确认。

    ensureCapacityInternal方法用来对ArrayList进行扩容,该方法需要录入一个minCapacity的变量,这个变量等于size+1,这个值标志这将要录入的值在ArrayList中所占的下标位置。进入该方法之后,先对该集合对象进行效验,效验该集合对象是否是默认对象,集合的默认大小(10)是否能满足当前的需求,将集合最小的容量返回。

    ensureCapacityInternal方法获取了集合满足要求的最小容量后,调用ensureExplicitCapacity方法来确定对象容量(是否需要扩容),ensureExplicitCapacity方法先判断elementData数组大小是否符合传入的集合最小符合大小,如果符合方法结束,如果不符合调用grow方法对集合进行扩容。

grow方法是具体对集合对象进行扩容,容量每次扩展:element数组容量+element数组长度大小的一半。通过容量这个方法,我们可以得出一个结论,ArrayList的容量是有上线的,最大容量就是int类型的最大值。

ArrayList扩容完成以后,将传入的数据赋值到element数组上。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值