在上一篇《ArrayList源码解析之架构》里面,对ArrayList的整体架构和数组的相关知识做了分享,本节将延续上节知识点,对ArrayList的源码进行分析。
1. ArrayList初始化方式
在开始介绍初始化之前,首先需要注意在源码中有两个空引用,如下图:
-
EMPTY_ELEMENTDATA是一个共享空数组实例,当传入ArrayList构造器的容量为0时,用这个数组表示容器的容量为0。
-
DEFAULTCAPACITY_EMPTY_ELEMENTDATA也是一个共享的空数组实例,主要是为了区别于EMPTY_ELEMENTDATA,主要作为一个标识位,在扩容时区分默认大小和容量为0,使用默认容量时采取的是“懒加载”,即等到add元素的时候才进行实际容量的分配。
1.1 无参数直接初始化
ArrayList第一种初始化方式是无参数初始化,源码如下:
在使用无参构造器初始化时,从源码可以看出指向的是默认容量大小的object数组,需要注意的是在使用