Java ArrayList 集合详解与底层原理
在 Java 开发中,处理多个元素的数据是常态。虽然数组是最基础的数据结构,但其长度固定的特性在实际应用中往往显得捉襟见肘。Java 集合框架应运而生,它不仅能根据元素增减自动调整大小,还提供了丰富的操作方法。本文将深入探讨最常用的 ArrayList 类,从原理到实战,帮你彻底掌握这一核心工具。
为什么需要集合
数组的局限
当我们试图存储一组数据时,数组往往是首选。例如:
int[] arr = new int[3];
数组通过索引访问元素的速度很快,但一旦创建,长度便无法更改。若需存储更多数据,必须手动创建新数组并复制旧数据,这不仅繁琐且影响性能。
集合的优势
集合解决了上述痛点。以 ArrayList 为例,其长度可变,能随元素添加自动扩容,无需开发者操心内存管理细节。
数据类型差异
数组既支持基本类型也支持引用类型,而集合仅支持引用类型。这是因为 Java 泛型机制的限制。若要存储基本类型(如 int),需使用包装类(如 Integer):
import java.util.ArrayList;
ArrayList<Integer> list = new ArrayList<>();
list.add(1); // 自动装箱
ArrayList 核心解析
概述与创建
ArrayList 实现了 List 接口,底层基于动态数组。JDK 7 之后,可以使用菱形语法简化泛型声明:
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list); // 输出:[]
}
}
底层原理
ArrayList 内部维护了一个对象数组。默认初始容量通常为 10。当元素超出当前容量时,它会创建一个新数组(原容量的 1.5 倍),并将旧数据复制过去。这种扩容策略平衡了空间利用率和性能开销。
常用方法
以下是 ArrayList 的核心 API 及其行为说明:
| 方法签名 |
|---|


