java源码学习-ArrayList

ArrayList 我们几乎每天都会使用到。

1. 整体架构

ArrayList 整体架构比较简单,就是一个数组结构,比较简单:


整体架构

图中展示是长度为 10 的数组,从 1 开始计数,index 表示数组的下标,从 0 开始计数,elementData 表示数组本身,源码中除了这两个概念,还有以下三个基本概念:

·DEFAULT_CAPACITY (默认容量) 表示数组的初始大小,默认是 10,这个数字要记住;
·size 表示当前数组的大小,类型 int,没有使用 volatile 修饰,非线程安全的;
·modCount 统计当前数组被修改的版本次数,数组结构有变动,就会 +1。

类注释

看源码,首先要看类注释,我们看看类注释上面都说了什么,如下:

允许 put null 值,会自动扩容;
size、isEmpty、get、set、add 等方法时间复杂度都是 O (1);
是非线程安全的,多线程情况下,推荐使用线程安全类:Collections#synchronizedList;
增强 for 循环,或者使用迭代器迭代过程中,如果数组大小被改变,会快速失败,抛出异常。
除了上述注释中提到的 4 点,初始化、扩容的本质、迭代器等问题也经常被问。

2. 源码

你可能感兴趣的:(java源码学习-ArrayList)