前言概述核心代码扩容操作
一、ArrayList集合底层扩容原理
前言概述核心代码扩容操作
1.1 第一章 前言概述
第01节 概述
底层说明 ArrayList是List的实现类,它的底层是用Object数组存储,线程不安全 后期应用
适合用于频繁的查询工作,因为底层是数组,可以快速通过数组下标进行查找
第02节 区别
区别方向ArrayList集合LinkedList集合线程安全不安全不安全底层原理Object类型数组双向链表随机访问支持(实现 RandomAccess接口)不支持内存占用ArrayList 浪费空间,底层是数组,末尾预留一部分容量空间LinkedList占用空间比ArrayList多,存在头尾地址值占用空间
小结
1 | |
1.2 第二章 核心代码
第01节 成员变量
代码
1 | |
ArrayList 集合底层存在6个成员变量
还有一个 private static final long serialVersionUID = 8683452581122892189L;
序列化使用, 目前针对于当前的操作过程当中, 暂时不会使用得到。ArrayList 集合当中核心的两个成员变量
A. 底层维护数组 transient Object[] elementData;
B. 存储的元素个数 private int size;
1 | |
/**
* 构造一个初始长度为0的空数组。
1 | |
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
1 | |
/**
* 在构造方法当中,传递一个参数集合c,将集合 c 转换成为新的列表
- elementData 当中的数据,就是新集合存放的数据
- c.toArray 就是将原始集合的数据取出
- 如果取出的集合长度不为零的情况下,则复制 参数集合c 到 elementData 当中
- 如果取出的集合长度为零的情况下,则赋值为空数组 EMPTY_ELEMENTDATA
1
*/
elementData = c.toArray();public ArrayList(Collection<? extends E> c) {
if ((size = elementData.length) != 0) {
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
this.elementData = EMPTY_ELEMENTDATA;/**1
2}- 指定参数的长度大小
- 如果初始化的长度大于0,则返回新的数组
- 如果初始化的长度等于0,则返回默认的空数组作为集合 this.elementData = EMPTY_ELEMENTDATA;
- 如果初始化的长度小于0,则出现非法参数异常
1
*/
if (initialCapacity > 0) {public ArrayList(int initialCapacity) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
throw new IllegalArgumentException(“Illegal Capacity: “+ initialCapacity);1
2}
补充(一) 无参构造创建对象
补充(二)带参构造创建对象,带有int类型参数
补充(三)带参构造创建对象,带有 集合类型参数
1.3 第三章 扩容操作
第01节 扩容代码
核心方法介绍
来自于 ArrayList 集合当中的方法:
- public boolean add(E e){ … }
- private void add(E e, Object[] elementData, int s){ …. }
- private Object[] grow()
- private Object[] grow(int minCapacity)
来自于其他类当中的功能
- Arrays.copyOf(elementData, newCapacity); 表示来自于 数组工具类 Arrays 当中的 copyOf() 底层使用的是 System.arraycopy() 方法
- Math.max(DEFAULT_CAPACITY, minCapacity) 表示来自于 数学工具类 Math 当中的 max() 方法,比较两个数据最大值,取较大者,返回
核心代码解释
1 | |
第02节 动态过程说明
本文标题: ArrayList集合底层扩容原理
发布时间: 2021年02月14日 00:00
最后更新: 2026年09月16日 05:40
原始链接: https://haoxiang.eu.org/68561f61/
版权声明: 本文著作权归作者所有,均采用CC BY-NC-SA 4.0许可协议,转载请注明出处!

