爱马士团团长 发表于 2021-8-11 16:37:55

备战Java口试「JDK集合源码系列」——ArrayList源码解析

因为热爱坚持所以,因为热爱所以热爱。熬过你无戏可演的日子,终于换来了人生的春天,共勉!!!
1.ArrayList继承体系

https://p3.toutiaoimg.com/large/pgc-image/d16a6e52fef4418a836cff7b5f203c18
ArrayList中又称动态数组,底层是基于数组实现的列表,与数组的区别在于,其具备动态扩展能力从继承体系图中可看出。ArrayList中:
公共类 ArrayList 扩展 AbstractList      实现List < E >、RandomAccess、Cloneable、java.io。可序列化{        ...}复制代码实现了List、RandomAccess、Cloneable、java.io.Serializable等接口

[*]实现了列表,具备底子的添加、删除、遍历等操纵
[*]实现了RandomAccess,拥有随机访问的能力
[*]实现了Cloneable,可以被克隆(浅拷贝) list.clone()
[*]实现了Serializable,可以被序列化
2. ArrayList 属性

/** * 默认初始容量。 *默认容量 */私有静态终极 int DEFAULT_CAPACITY = 10 ;/** ·共享空 阵列 实例用于为 空的情况。 * 空数组,如果上限的容量为0时使用 */私有静态终极对象[] EMPTY_ELEMENTDATA = {};/** ·共享空 阵列 实例用于为 默认尺寸空实例。 * 我们将其与 EMPTY_ELEMENTDATA 区分开来,以了解添加第一个元素时要膨胀多少。 *默认空容量的数组,长度为0,第一个容量时间使用,一个时间会初始添加为默认容量巨细 */私有静态终极对象[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};/** *该阵列到其中的元件缓冲器的存储ArrayList中。 *容量的该ArrayList是长度的此阵列缓冲器。任何 *带有 elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA 的空ArrayList * 将在添加第一个元素时扩展为DEFAULT_CAPACITY 。 * 聚集中真正存储数据元素的数组容器 */瞬态对象[] elementData; // 非私有以简化嵌套类访问/** *巨细的该ArrayList(数量的它包罗的元素)。 *聚集中元素的个数 * @串行 */私有整数巨细;复制代码

[*]DEFAULT_CAPACITY:聚集的默认容量,默认为10,通过new ArrayList()创建List聚集实例时的默认容量为10。
[*]EMPTY_ELEMENTDATA:空数组,通过new ArrayList(0)创建List聚集实例时用的是这个空数组。
[*]DEFAULTCAPACITY_EMPTY_ELEMENTDATA:这个默认容量空数组,这种是通过new ArrayList()无参构造方法创建聚集时用的是这个空数组,与EMPTY_ELEMENTDATA的区别是在添加第一个元素时使用空数组的会初始化为DEFAULT_CAPACITY (10)个元素。
[*]elementData存储数据元素的数组,使用瞬态相应,该定位知识化。
[*]巨细:存储数据元素的个数,元素数据数组的长度非存储数据元素的个数。\
3.ArrayList构造方法


[*]有参构造 ArrayList(int initialCapacity)
/** * 构造一个具有指定初始容量的空列表。 * 构造具有指定初始能力的空数组 * * @param initialCapacity 列表初始容量列表的初始容量 * @throws IllegalArgumentException 如果指定的初始容量为负 * *对应初始初始容量,如果大于0就初始化元素数据为巨细,如果等于0就使用EMPTY_ELEMENTDATA空数组, * 如果小于0 非常。 */ // ArrayList(int initialCapacity)构造方法publicArrayList ( int initialCapacity){   if (initialCapacity > 0 ) {         this .elementData = new Object;    } elseif (initialCapacity == 0 ) {         this .elementData = EMPTY_ELEMENTDATA;    } else {         thrownew IllegalArgumentException( "不合理的初识能力:" +                初始容量);    }}复制代码

[*]无参构造ArrayList()
/*** 构造一个初始容量为 10 的空列表。* 构造一个终极能力为10的空数组** 不传初始空,初始化为DEFAULTCAPACITY_EMPTY_ELEMENTDATA数组,* 会在添加第一个元素的时候扩容为默认的巨细,即10。*/publicArrayList (){      this .elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }复制代码

[*]有参构造ArrayList(Collection c)
/** * 构造一个包罗指定元素的列表 * 聚集,按照聚集返回的顺序 * 迭代器。 * 把聚集的元素初始化到ArrayList中 * * @param c 其元素将被放入此列表的聚集 * @throws NullPointerException 如果指定的聚集为空 */ public ArrayList(Collection
页: [1]
查看完整版本: 备战Java口试「JDK集合源码系列」——ArrayList源码解析