ArrayList源码

ArrayList源码

ArrayList的初始化:

ArrayList源码
提供两个构造方法。initialCapacity是初始化指定的List的容量(明显初始化容量不能<0).无参的构造方法如果没有指定初始化容量,那么默认的容量设置为EMPTY_ELEMENTDATA;

我们看看这个 EMPTY_ELEMENTDATA 是什么:
ArrayList源码
是一个空的数组。也就是ArrayList中的元素个数为0

向ArrayList中添加元素:

ArrayList源码
其中核心方法ensureCapacityInternal() 很好理解。 添加一个元素之前要确定该容器的容量够不够添加一个新的元素。
我们看这个 ensureCapacityInternal() 方法:
ArrayList源码
获取一个最大的集合的容量

扩容:
ArrayList源码使用位运算的方式,扩容伟原来的1.5倍。
扩容的方式,就是新建一个数组,然后复制过去:
ArrayList源码
ArrayList源码
最后调用的是jdk中native的本地的方法。jdk中与平台无关的native代码在jdk中主要是通过c实现的。