📚 分类
集合
🕵🏽‍♀️ 问题描述
ArrayList源码分析
👨‍🏫 问题讲解
❒ 数组初始化方法有三个
✔ 第一: 指定数组长度。
✔ 第二: 无参构造函数。
✔ 第三: 参数是一个线性集合(Collect)。

❒ 数组的新增过程
✔ 一般我们使用的都是无参构造函数去创建数组。
✔ 每次新增的时候会先判断当前 size+1 和当前elementData长度哪个大,默认 size + 1 (0 + 1) > elementData.length(0)。
✔ 所以第一次添加数据,数组便会扩容一次,长度为  DEFAULT CAPACITY = 10。
✔ 当添加数据大于10的时候,便会再次触发扩容,扩容公式为 elementData.length + length >> 1 (扩容0.5倍,加上原来大小是1.5倍)。
✔ 扩容时,需要对数组进行拷贝 elementData = Arrays.copyOf(elementData, newCapacity)。
🏳️‍🌈 问题总结
❒ ArrayList底层的实现原理是什么
✔ ArrayList底层是用动态的数组实现的。
✔ ArrayList初始容量为0,当第一次添加数据的时候才会初始化容量为10,ArrayList在进行扩容的时候是原来容量的1.5倍,每次扩容都需要拷贝。

❒ 数组ArrayList在添加数据的过程
✔ 确保数组已使用长度(size)加1之后足够存下下一个数据。
✔ 计算数组的容量,如果当前数组已使用长度+1后的大于当前的数组长度,则调用grow方法扩容(原来的1.5倍)。
✔ 确保新增的数据有地方存储之后,则将新元素添加到位于size的位置上。
✔ 返回添加成功布尔值。
📖 问题信息
📈 浏览次数:57 | 📅 更新时间:2026-01-13 08:51:04
📦 创建信息
🏷️ ID:80 | 📅 创建时间:2025-01-07 20:04:46