使用 clear() 方法可以清空 arraylist 中的所有元素。调用该方法后,列表的大小将变为 0,且内部存储对象的引用会被置为 null 以辅助垃圾回收。

clear() 方法执行后的内存状态是怎样的
clear() 方法会遍历内部数组并将每个索引位置的元素设置为 null,同时重置计数器 size 为 0。这确保了之前的对象不再被该列表强引用,从而可以被垃圾收集器回收。

import java.util.ArrayList;
import java.util.List;
public class ClearListDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
// 清空操作
list.clear();
System.out.println("Size: " + list.size()); // 输出 0
System.out.println("Is Empty: " + list.isEmpty()); // 输出 true
}
}重新实例化与 clear() 的性能差异如何
虽然可以通过 new ArrayList() 创建新对象来替代旧列表,但 clear() 通常更高效,因为它复用了现有的底层数组容量,避免了重新分配内存的开销。如果旧列表非常大且不再需要保留容量,重新实例化可能更合适以释放内存。
立即学习“Java免费学习笔记(深入)”;

import java.util.ArrayList;
import java.util.List;
public class CompareClearAndNew {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
list.add("Item " + i);
}
// 方式一:clear()
long start1 = System.nanoTime();
list.clear();
long end1 = System.nanoTime();
// 方式二:重新实例化
long start2 = System.nanoTime();
list = new ArrayList<>();
long end2 = System.nanoTime();
System.out.println("Clear time: " + (end1 - start1));
System.out.println("New instance time: " + (end2 - start2));
}
}清空后再次添加元素时的容量变化
在调用 clear() 后,如果继续向列表中添加元素,底层的数组容量不会自动缩小,而是保持之前的最大容量。这意味着如果之前列表增长到了很大容量,即使清空了,它仍然占用相应的内存空间,直到下次扩容或手动调整。


















