关于ArrayList

294 阅读1分钟

注:本文关于的ArryList基于jdk1.7(因为公司用的就是1.7),1.8等楼主有时间再更

废话不多说,直接上源码

首先,继承关系:


这里插一嘴,Serializable 启用其序列化功能的接口提供序列化,在开发过程中实体类最好都实现,因为楼主在开发过程中经常忘记实现,导致在dubbo调用的时候无法序列化报错,还有在把数据放入redis时,未实现序列化也会报错。




解释一下 transient 关键字:由此关键字修饰,那么在序列化的时候,这些属性不会被序列化。那为什么要修饰elementData呢? 见最后一张图。


DEFAULT_CAPACITY:默认大小

Object[] EMPTY_ELEMENTDATA:空的object数组

Object[] elementData:实际又来存储数据的数组

size:整个ArrayList的大小

MAX_ARRAY_SIZE:最大容量,为了满足不同虚拟机,设计成Integer最大值-8。


接下来,构造方法:


默认构造方法:

这里只是把 EMPTY_ELEMENTDATA赋给elementData,并没有分配内存

定义数组时没有限定长度,则在用到它的时候,系统开始分配内存



初始化一个自定义大小的ArrayList

add方法:




remove方法(根据传入的位置进行移除):


remove方法(根据传入的对象进行移除):




解释为何elementData被transient 修饰

其他的方法基本是这些方法的升级,基础方法都懂了,何尝看不懂其他的方法呢!


如果有错误或者更好的说明,请在下发留言,我会在第一时间回复改正,谢谢!


我不能保证我会在程序员这一行业中一直走下去,但至少此刻,我的信念仍坚定不移。