推荐使用 clear() 方法清空 arraylist,它高效、语义明确,时间复杂度 o(n),置空元素引用助 gc,size 变 0 且保持底层数组容量不变;不推荐新建对象或手动循环删除。

在 Java 中清空 ArrayList 的所有元素,最常用且推荐的方式是调用 clear() 方法。
使用 clear() 方法(推荐)
这是最直接、高效、语义明确的方式。它会移除列表中所有元素,使 ArrayList 变为空,但不改变其底层容量(即内部数组大小不变,后续添加元素时无需立即扩容)。
- 时间复杂度为 O(n),因为需要将每个元素引用置为 null(有助于 GC)
- 调用后
list.size()返回 0,list.isEmpty()返回 true - 示例:list.clear();
重新创建新对象(不推荐,除非有特殊需求)
写成 list = new ArrayList(); 确实会让原列表“变空”,但本质是让变量指向一个新对象,原 ArrayList 实例并未被清空,只是失去引用(若无其他引用,会被 GC 回收)。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 如果其他变量或集合仍持有对该 ArrayList 的引用,它们不会受影响
- 频繁新建对象可能增加 GC 压力,且语义不如 clear() 清晰
- 仅在需要彻底释放内存且确认无其他引用时才考虑
用 removeRange 或循环 remove(应避免)
手动遍历调用 remove(0) 或使用 removeRange(0, size())(该方法非 public,不可直接调用)效率低、易出错,且可能引发 ConcurrentModificationException(尤其在 foreach 中)。
- 不要用 for-each 循环配合 remove() —— 会抛异常
- 倒序 for 循环虽可行,但没必要:clear() 已高度优化,代码更简洁安全
注意:clear() 不影响 ArrayList 引用本身
clear() 操作后,ArrayList 对象仍在堆中,其内部数组未被销毁(只是元素设为 null),容量(capacity)保持不变。如果之后大量添加元素,可复用原有数组空间,减少扩容次数。
- 若想真正释放内存并重置容量,可结合 list.trimToSize();(但通常没必要)
- clear() 是线程不安全的,多线程环境下需额外同步
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










