最常用、最推荐的方式是调用 clear() 方法,它高效、语义明确,移除所有元素但保持容量不变,时间复杂度 O(n),调用后 size 为 0 且 isEmpty() 返回 true。

Java 中清空 ArrayList 的所有数据,最常用、最推荐的方式是调用 clear() 方法。
使用 clear() 方法(推荐)
这是标准、高效且语义明确的做法。它会移除列表中所有元素,但不改变 ArrayList 对象本身,其容量(capacity)保持不变,后续仍可继续添加元素。
- 时间复杂度为 O(n),因为需要遍历并置空每个引用(对对象类型)或重置内部数组位置;
- 调用后
list.size()返回 0,list.isEmpty()返回true; - 示例:list.clear();
重新 new 一个新 ArrayList(不推荐用于单纯清空)
虽然 list = new ArrayList(); 看似“清空”,但它创建了新对象,原引用指向新实例,旧列表若还有其他引用则不会被清空,且可能引发意料外的副作用(如其他变量仍持有旧列表)。
- 适用于想彻底弃用旧列表、且确认无其他引用的场景;
- 不是真正的“清空”,而是“替换”,会增加 GC 压力;
- 一般不作为清空操作的首选。
手动循环移除(低效,不推荐)
例如用 remove(0) 循环或 removeAll(list),不仅代码冗长,而且性能差(尤其 remove(0) 每次都挪动后续元素,变成 O(n²))。
立即学习“Java免费学习笔记(深入)”;
-
list.removeAll(list)虽能清空,但语义绕弯、可读性差; - 没有理由放弃简洁的
clear()去用这些方式。
注意:clear() 不影响 ArrayList 的初始容量
比如通过 new ArrayList(100) 创建的列表,调用 clear() 后虽然元素为 0,但内部数组长度仍是 100,下次添加元素时无需立即扩容。
- 如果希望真正释放内存(如列表曾存大量数据且后续长期不用),可考虑 list = new ArrayList(); 或先
clear()再调用trimToSize()缩容; -
trimToSize()会将内部数组大小调整为当前元素个数(即 0),释放多余空间。


















