clear() 是最直接且安全的清空方式,它移除所有元素、保持对象引用不变、语义明确、性能可控,而 new XXX() 易致内存泄漏,removeAll()/retainAll() 效率低且非原子,Map 清空也应优先用 clear()。
clear() 是最直接且安全的清空方式
Java 集合接口(Collection 及其子接口如 List、Set、Queue)都定义了 clear() 方法,它会移除所有元素,将集合大小归零,同时保持集合对象本身不变。
这是推荐做法,因为:
- 语义明确:意图就是清空,不是重建或替换
- 性能可控:多数实现(如
ArrayList、HashSet)是 O(n) 时间但仅遍历并置空引用,不触发扩容/缩容逻辑 - 引用稳定:原集合变量仍指向同一对象,不会导致其他持有该引用的地方失效
- 线程安全集合(如
CopyOnWriteArrayList)的clear()也按预期工作,只是开销略高
别用 = new XXX() 替代 clear(),除非你真想换对象
写 list = new ArrayList(); 看似“清空”,实则是创建新对象并让变量指向它。老对象若还有其他引用(比如被另一个类缓存、传入了监听器、放在静态容器里),就根本没被清空,反而造成内存泄漏风险。
常见误用场景:
立即学习“Java免费学习笔记(深入)”;