ArrayList深层源码解析[附流程图]

这篇博客详细介绍了ArrayList的内部实现,重点关注其elementData数组和扩容机制。当添加数据时,ArrayList会检查容量,如果需要则按照原始容量的1.5倍进行扩容。文章通过有参和无参构造函数的解析,展示了ArrayList初始化的过程,并指出ArrayList是线程不安全但效率高的数据结构,允许存储null值。博主分享了源码图以供读者学习和调试。
摘要由CSDN通过智能技术生成

众所周知ArrayList内部维护了elementData的Object数组,作为一名合格的程序员,我们不光要知道怎么用它,更要了解它们是怎么实现的,知其根,附上清晰的源码图供大家学习!

大致流程:

传入数据-->获取最小需要容量 -->确认是否需要扩容-->需要则扩容否则直接进行下一步-->扩容大小为原始数据的1.5倍,如果原始容量为0则扩容大小为10--->添加数据返回true

有参构造解析:

解读:

        如果传入参数大于0则elementData=指定参数大小的Object的数组

        如果等于0则等于空数组

                private static final Object[] EMPTY_ELEMENTDATA = {};

        否者抛出参数异常

总结:ArrayList维护了一个名为elementData的数组,这就是他的底层结构

        ArrayList是线程不安全的,但是效率高

        ArrayList也是可以放入null值的

附上源码供大家debug

//使用无参构造器创建 ArrayList 对象
ArrayList list = new ArrayList();
list.add(1);
//使用有参构造器创建 ArrayList 对象
ArrayList list = new ArrayList(1);

作者的话:如果本文对您起到了帮助麻烦随手点个赞,或关注更好哈哈哈,谢谢支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值