爱马士团团长 潜水
  • 6发帖数
  • 6主题数
  • 0关注数
  • 0粉丝
开启左侧

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

[复制链接]
爱马士团团长 发表于 2021-8-11 16:37:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
因为热爱坚持所以,因为热爱所以热爱。熬过你无戏可演的日子,终于换来了人生的春天,共勉!!!
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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
在线客服QQ
2241998733

24x7小时免费咨询

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城繁体中文