注:本文关于的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 修饰
其他的方法基本是这些方法的升级,基础方法都懂了,何尝看不懂其他的方法呢!
如果有错误或者更好的说明,请在下发留言,我会在第一时间回复改正,谢谢!
我不能保证我会在程序员这一行业中一直走下去,但至少此刻,我的信念仍坚定不移。