ArrayList的底层源码分析

本文详细介绍了ArrayList的数据结构、构造方法,以及增删改查操作的源码分析,重点讨论了扩容机制。作者鼓励读者提出意见,将持续分享更多底层实现细节。
摘要由CSDN通过智能技术生成

ArrayList

ArrayList是我们最常使用的集合之一,使用场景通常是数据查询,因为ArrayList的底层实现是数据,通过索引就可以直接找到对应的元素。所以查询效率高


一、ArrayList的数据结构

在这里插入图片描述

从源码中看得出ArrayList继承了AbstractList,并且实现了List,RandomAccess(随机访问),Cloneable(克隆)和Serializable(序列化)接口。

下图更加直观的展示出了ArrayList与其他类之间的关系:

在这里插入图片描述

ArrayList的参数以及构造方法

  • 参数

在这里插入图片描述

  • 构造方法

    「ArrayList有三个构造方法我们一个一个来进行分析」

    1.ArrayList的第一种构造方法
    在这里插入图片描述

     这个构造函数只需要传入ArrayList的长度。
     当我们传入大于0的长度时,会按照我们传入的长度创建ArrayList集合
     当我们传入等于0的长度时,会使用到EMPTY_ELEMENTDATA,默认一个空的数组
     当我们传入小于0的长度时,会直接抛出异常。
    
    1. ArrayList的第二种构造函数 在这里插入图片描述
      第二种构造函数无需我们传入参数,默认一个默认大小的空实例的共享空数组实例

    2. ArrayList的第三种构造函数
      在这里插入图片描述
      传入一个集合,如果传入的集合中有数据则返回包含传入集合中的数据的ArrayList

二、增删改查操作

1.新增源码分析

图中文字有个小错误,懒得截屏编辑图片就直接文字说明了。 size+1不是扩容的下标,而是扩容的长度

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.删除源码分析

在这里插入图片描述

3.根据下标获取源码分析

代码如下(示例):
在这里插入图片描述


ArrayList的扩容机制

ArrayList的扩容是在原有的基础上扩容1.5或者2倍,但是不得超过虚拟机最大限制值,源码中有体现,如果集合按照1.5倍或者2倍扩容之后的新容量大于虚拟机的最大限制值,则会默认给虚拟机的最大限制值。

每次扩容之前都会判断是否需要进行扩容。

总结

本文主要是讲述了ArrayList的底层源码实现,如有不对的地方,可以私信我,也可以评论区发表意见。
后续还会继续补充ArrayList的底层实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值