ArrayList是Java中最贴近动态数组语义的集合类,基于可扩容Object数组实现,支持自动扩容、随机访问和增删改查;需用泛型声明类型,可设初始容量,删除后需手动trimToSize释放内存。

Java 中没有原生的“动态数组”类型,但 ArrayList 是最常用、最贴近动态数组语义的集合类——它底层基于可扩容的 Object 数组实现,支持自动扩容、随机访问、增删改查,是处理变长数据的首选。
初始化 ArrayList:指定类型更安全
使用泛型声明元素类型,避免运行时类型错误和强制转换:
-
推荐写法(泛型):
ArrayList<String> list = new ArrayList<>(); -
不推荐(原始类型):
ArrayList list = new ArrayList();(丢失类型检查,易出错) - 可选初始容量:
new ArrayList<>(16);,减少频繁扩容开销(适合预估数据量场景)
添加与访问:像数组一样简单,但更灵活
支持在末尾追加,也支持任意位置插入;索引访问快,和数组一样是 O(1):
-
list.add("hello");→ 添加到末尾 -
list.add(0, "first");→ 在索引 0 插入,后续元素自动后移 -
String s = list.get(2);→ 按下标获取,越界抛IndexOutOfBoundsException -
list.set(1, "updated");→ 替换索引 1 处的元素
删除与调整大小:自动缩容需手动干预
删除操作会移动元素,时间复杂度为 O(n);注意 ArrayList 不会自动缩容,即使清空大部分数据,内部数组仍保持原有容量:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
-
list.remove(0);→ 删除索引 0 元素 -
list.remove("target");→ 删除第一个匹配的元素(调用 equals 比较) -
list.clear();→ 清空所有元素,但list.size()变为 0,list.capacity(内部数组长度)不变 - 如需真正释放内存:调用
list.trimToSize();(将内部数组缩至当前 size)或list.ensureCapacity(10);(预分配)
遍历与转换:兼容多种编程习惯
支持传统 for、增强 for、迭代器、Stream 流式处理,也可转为普通数组:
- 增强 for 循环:
for (String s : list) { ... } - 传统索引遍历:
for (int i = 0; i - 转为数组:
String[] arr = list.toArray(new String[0]);(推荐传入空数组,类型安全) - Java 8+ 流处理:
list.stream().filter(s -> s.length() > 3).collect(Collectors.toList());
ArrayList 就是 Java 里最实用的动态数组替代方案——用法直观、性能均衡、生态完善。只要记住泛型声明、理解扩容机制(默认 1.5 倍增长)、留意自动缩容不存在,就能高效驾驭变长数据管理。

















