ArrayList的源码解读

ArrayList不是线程安全的,其底层是通过Object[] 数组实现的。
ArrayList源码分析记录

首先ArrayList继承了AbstractList类,实现了List接口
在这里插入图片描述

1.属性
在这里插入图片描述在这里插入图片描述
DEFAULT_CAPACITY 默认初始的容量的大小,默认为10
EMPTY_ELEMENTDATA 用于共享的空数组实例
DEFAULTCAPACITY_EMPTY_ELEMENTDATA 默认大小空数组实例,知道第一个元素核实被添加
elementData 数组缓存对象数组,当elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA时,第一个元素被添加时将会扩展默认大小的数组(该属性没有被初始化的原因就是,简化嵌套类访问)
size 这个表示数组中拥有对象的个数
在这里插入图片描述
静态成员变量,当ArrayList的实例尝试扩展时,超过这个值的话,可能会导致OutOfMemoryError

2.构造方法

在这里插入图片描述
构造一个初始容量是initalCapactity的一个数组
在这里插入图片描述
构造默认大小是空的数组,初始容量是10

在这里插入图片描述
构造一个包含指定元素的列表,元素顺序和列表迭代的顺序是一致的,

3.方法
在这里插入图片描述
将该实例当前列表容量大小的实例,应用程序可以操作最小化存储
在这里插入图片描述
Size获取集合中元素的个数,isEmpty判断集合中的额元素是否为空
在这里插入图片描述
IndexOf通过遍历数组,获取元素对象的下标,如果对象不存在则返回-1;
Contains判断元素是否存在
在这里插入图片描述
获取元素最后一次出现的下标,不存在返回-1
在这里插入图片描述
返回指定索引位置的元素,rangeCheck()方法是判断,该下标是否越界,越界的话则会抛出一个数组越界异常IndexOutOfBoundsException
在这里插入图片描述
在这里插入图片描述
添加元素,和在指定位置添加元素,rangeCheckForAdd()是判断元素插入的位置,是否越过数组的界限,越界的话会抛出IndexOutOfBoundsException
在这里插入图片描述

在添加的元素时,判断数组是否需要扩容,当size+1大于elementData的length时,则数组会扩容,
在这里插入图片描述在这里插入图片描述
这是数组的扩容机制,当扩容容量的大小大于数组最大的值时,会抛出异常,
在这里插入图片描述
根据下标删除数组中的元素,并且返回删除的元素

这是个人理解,理解有差错的地方,欢迎大佬提出来!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值