ArrayList底层原理之长度篇

ArrayList底层的本质是数组,数组是适合查询的,因为数组每个元素的内存空间是固定的,每次查询时,只需要去查询对应位置的内存空间,就可以很快找到相应的值。而数组相对来说不擅长的是添加和删除。

集合长度

ArrayList<String> strings = new ArrayList<>();
strings.add("草莓");

底层代码:

 

可以看到创建对象时并没有初始化数组的长度,所以我们由此可以推断一下,是不是第一次添加的时候才进行的初始化

 这里的if条件说明的是如果当前集合长度为空则调用max方法进行初始化长度

 这里a就是传过来的DEFAULIT_CAPACITY常量10

 由此可见,第一次扩容时是把集合长度设置为了长度为10

扩容机制:

 由源码可知扩容是每次进行的是扩容原来的长度+原来长度右移一位计算后的结果总和,也就是每次扩容1.5倍

假如有20个数据需要添加,那么会分别在第一次的时候,将ArrayList的容量变为10 ;之后扩容会按照1.5倍增长。也就是当添加第11个数据的时候,Arraylist继续扩容变为10*1.5=15;当添加第16个数据时,继续扩容变为15 * 1.5 =22个。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值