ArrayList源码分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


ArrayList介绍

提示:这里可以添加本文要记录的大概内容:

ArrayList是实现collection接口的集合,ArrayList的底层是数组,为什么有了数组还要有集合呢?因为集合更加方便我们进行add,move,delete操作,更加方便简洁。


提示:以下是本篇文章正文内容,下面案例可供参考

一、ArrayList的源码分析

1.ArrayList的底层操作机制

ArrayList
在这里插入图片描述
ArrayListSource的debug代码

在这里插入图片描述
然后开启debug,首先我们进入第七行,new一个无参构造方法
在这里插入图片描述

这里this.elementData指向的是一个空数组,无参构造初始化的时候,是一个空的数组

在这里插入图片描述
然后debug到add方法时,进行数组的扩容
在这里插入图片描述
这个方法是为了确保集合是否需要扩容,然后我们step into进入

是否明确要扩容
在这里插入图片描述
这里的modCount:记录集合修改的次数
判断集合是否需要去扩容,如果需要则调用grow方法

在这里插入图片描述
首先grow方法会获取之前集合的大小,这里有一个扩容的机制,但是原集合的容量为0,newCapacity=0+0/2=0;然后再去判断条件,这里条件成立然后就将minCapacity的值赋给newCapacity然后再用copyof方法进行扩容。

在这里插入图片描述
这里原集合就从零变成了容量为10的集合

当集合的容量到达十以后便要再次进行扩容

在这里插入图片描述
这里他直接变成了之前的1.5倍
在这里插入图片描述

那么当集合是有参构造方法的时候又是什么样呢,这里就不一一介绍了,在有参构造时候,集合扩容时候会按照之前的1.5倍扩容,你们也可以按照以上方法进行debug

每日一句

人生是一场漫长的修行,不断学习,不断提高自己

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值