1. ArrayList类概述
ArrayList是Java集合框架中最常用的动态数组实现类,它继承自AbstractList并实现了List接口。与普通数组不同,ArrayList能够自动扩容,提供了丰富的操作方法,是Java开发者日常工作中不可或缺的工具类。
我在实际项目中发现,90%以上的集合使用场景都会优先选择ArrayList。它就像是一个智能的"伸缩容器"——当元素数量超过当前容量时,会自动进行1.5倍的扩容;当大量元素被删除后,又可以手动调用trimToSize()来收缩存储空间。这种动态特性让开发者无需预先精确计算容量,大大提高了开发效率。
2. 核心特性解析
2.1 底层数据结构
ArrayList的底层实际上是一个Object[]数组,这也是它被称为"动态数组"的原因。通过查看JDK源码可以看到:
java复制transient Object[] elementData; // 存储元素的数组缓冲区
这个设计带来了两个重要特性:
- 随机访问速度快(时间复杂度O(1)),因为数组支持通过下标直接定位元素
- 插入/删除效率相对较低(平均O(n)),因为需要移动后续元素
提示:在Android开发中,对于频繁修改的场景建议考虑LinkedList,但要注意其内存占用会更高。
2.2 自动扩容机制
初始容量默认为10,扩容时采用"新容量=旧容量+旧容量>>1"的计算方式(即1.5倍)。扩容过程包括:
- 检查是否需要扩容
- 计算新容量
- 创建新数组
- 使用Arrays.copyOf复制数据
java复制// 扩容核心代码(JDK17)
private Object[] grow(int minCapacity) {
int oldCapacity = elementData.length;
if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
int newCapacity = ArraysSupport.newLength(oldCapacity,
minCapacity - oldCapacity, o
解锁全文
加入我们的会员,获取最新、最热、最精彩的开发者技术内容