Java Vector clear() 方法

Java Vector Java Vector

clear() 方法是 Vector 类提供的一个常用方法,用于移除集合中的所有元素。

public void clear()

方法功能

clear() 方法的主要功能是清空 Vector 中的所有元素,使其成为一个空集合。调用此方法后,Vectorsize() 将返回 0,但 capacity() 保持不变。

关键特点

  • 移除 Vector 中的所有元素
  • Vector 的大小(size)重置为 0
  • 不会改变 Vector 的容量(capacity)
  • 此操作的时间复杂度为 O(n),其中 n 是 Vector 的大小

方法实现原理

在 Java 的 Vector 类中,clear() 方法的实现实际上是通过调用 removeAllElements() 方法来完成的:

实例

public void clear() {
    removeAllElements();
}

removeAllElements() 方法的内部实现会遍历 Vector 中的所有元素,并将每个位置设置为 null,同时将元素计数器重置为 0。

源码分析

实例

public synchronized void removeAllElements() {
    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());
    }
}

输出结果

清空前的 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();

注意事项

容量不变

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)

线程安全

Vector 是线程安全的,clear() 方法也是同步的(synchronized),可以在多线程环境中安全使用。

与 ArrayList 的区别

虽然 ArrayList 也有 clear() 方法,但 Vectorclear() 是同步的,而 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;
}

常见问题解答

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 是空的");
}

总结

Vectorclear() 方法是一个简单但实用的工具,用于快速清空集合中的所有元素。理解它的工作原理和特点有助于编写更高效的 Java 代码。记住它与容量、线程安全相关的特性,以及在特定场景下的最佳实践。

Java Vector Java Vector