创意电子
标题:
备战Java口试「JDK集合源码系列」——ArrayList源码解析
[打印本页]
作者:
爱马士团团长
时间:
2021-8-11 16:37
标题:
备战Java口试「JDK集合源码系列」——ArrayList源码解析
因为热爱坚持所以,因为热爱所以热爱。熬过你无戏可演的日子,终于换来了人生的春天,共勉!!!
1.ArrayList继承体系
登录/注册后可看大图
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)构造方法public ArrayList ( int initialCapacity) { if (initialCapacity > 0 ) { this .elementData = new Object[initialCapacity]; } else if (initialCapacity == 0 ) { this .elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException( "不合理的初识能力:" + 初始容量); }}复制代码
无参构造ArrayList()
/** * 构造一个初始容量为 10 的空列表。 * 构造一个终极能力为10的空数组 * * 不传初始空,初始化为DEFAULTCAPACITY_EMPTY_ELEMENTDATA数组, * 会在添加第一个元素的时候扩容为默认的巨细,即10。 */ public ArrayList () { this .elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }复制代码
有参构造ArrayList(Collection c)
/** * 构造一个包罗指定元素的列表 * 聚集,按照聚集返回的顺序 * 迭代器。 * 把聚集的元素初始化到ArrayList中 * * @param c 其元素将被放入此列表的聚集 * @throws NullPointerException 如果指定的聚集为空 */ public ArrayList(Collection
欢迎光临 创意电子 (https://wxcydz.cc/)
Powered by Discuz! X3.4