Java Vector clear() 方法
clear()
方法是 Vector
类提供的一个常用方法,用于移除集合中的所有元素。
public void clear()
方法功能
clear()
方法的主要功能是清空 Vector
中的所有元素,使其成为一个空集合。调用此方法后,Vector
的 size()
将返回 0,但 capacity()
保持不变。
关键特点
- 移除
Vector
中的所有元素 - 将
Vector
的大小(size)重置为 0 - 不会改变
Vector
的容量(capacity) - 此操作的时间复杂度为 O(n),其中 n 是
Vector
的大小
方法实现原理
在 Java 的 Vector
类中,clear()
方法的实现实际上是通过调用 removeAllElements()
方法来完成的:
实例
public void clear() {
removeAllElements();
}
removeAllElements();
}
removeAllElements()
方法的内部实现会遍历 Vector
中的所有元素,并将每个位置设置为 null
,同时将元素计数器重置为 0。
源码分析
实例
public synchronized void removeAllElements() {
modCount++;
// 将所有元素设为 null
for (int i = 0; i < elementCount; i++)
elementData[i] = null;
elementCount = 0; // 重置元素计数器
}
modCount++;
// 将所有元素设为 null
for (int i = 0; i < elementCount; i++)
elementData[i] = null;
elementCount = 0; // 重置元素计数器
}
使用示例
基本用法
实例
import java.util.Vector;
public class VectorClearExample {
public static void main(String[] args) {
// 创建一个 Vector 并添加元素
Vector<String> fruits = new Vector<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
System.out.println("清空前的 Vector: " + fruits);
System.out.println("清空前的大小: " + fruits.size());
// 使用 clear() 方法清空 Vector
fruits.clear();
System.out.println("清空后的 Vector: " + fruits);
System.out.println("清空后的大小: " + fruits.size());
}
}
public class VectorClearExample {
public static void main(String[] args) {
// 创建一个 Vector 并添加元素
Vector<String> fruits = new Vector<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
System.out.println("清空前的 Vector: " + fruits);
System.out.println("清空前的大小: " + fruits.size());
// 使用 clear() 方法清空 Vector
fruits.clear();
System.out.println("清空后的 Vector: " + fruits);
System.out.println("清空后的大小: " + fruits.size());
}
}
输出结果
清空前的 Vector: [Apple, Banana, Orange] 清空前的大小: 3 清空后的 Vector: [] 清空后的大小: 0
与 removeAllElements() 的关系
实例
Vector<Integer> numbers = new Vector<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// clear() 和 removeAllElements() 效果相同
numbers.clear(); // 清空 Vector
// 等同于
// numbers.removeAllElements();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// clear() 和 removeAllElements() 效果相同
numbers.clear(); // 清空 Vector
// 等同于
// numbers.removeAllElements();
注意事项
容量不变
clear()
方法只会清空 Vector
中的元素,但不会改变其容量。如果需要同时减少容量,可以调用 trimToSize()
方法:
实例
Vector<String> items = new Vector<>(20); // 初始容量为 20
items.add("A");
items.add("B");
items.add("C");
items.clear(); // 清空元素,容量仍为 20
items.trimToSize(); // 将容量调整为当前大小(0)
items.add("A");
items.add("B");
items.add("C");
items.clear(); // 清空元素,容量仍为 20
items.trimToSize(); // 将容量调整为当前大小(0)
线程安全
Vector
是线程安全的,clear()
方法也是同步的(synchronized),可以在多线程环境中安全使用。
与 ArrayList 的区别
虽然 ArrayList
也有 clear()
方法,但 Vector
的 clear()
是同步的,而 ArrayList
的不是:
实例
// Vector 的 clear() 是同步的
public synchronized void clear() {
removeAllElements();
}
// ArrayList 的 clear() 不是同步的
public void clear() {
modCount++;
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
public synchronized void clear() {
removeAllElements();
}
// ArrayList 的 clear() 不是同步的
public void clear() {
modCount++;
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
常见问题解答
Q1: clear() 方法会释放内存吗?
clear()
方法会将所有元素引用设置为 null
,这使得这些对象可以被垃圾回收器回收(如果没有其他引用指向它们)。但是,Vector
内部的数组本身不会被释放,只是其中的元素被清空。
Q2: clear() 和 new Vector() 有什么区别?
clear()
重用现有的Vector
对象,只清空其中的元素new Vector()
创建一个全新的Vector
对象,旧的Vector
如果没有其他引用会被垃圾回收
Q3: 如何判断 Vector 是否为空?
可以使用 isEmpty()
方法:
实例
Vector<String> v = new Vector<>();
v.clear();
if (v.isEmpty()) {
System.out.println("Vector 是空的");
}
v.clear();
if (v.isEmpty()) {
System.out.println("Vector 是空的");
}
总结
Vector
的 clear()
方法是一个简单但实用的工具,用于快速清空集合中的所有元素。理解它的工作原理和特点有助于编写更高效的 Java 代码。记住它与容量、线程安全相关的特性,以及在特定场景下的最佳实践。
点我分享笔记