Метод clear() класса Java Vector

Java Vector Java Vector

clear()Метод являетсяVectorобычный метод, предоставляемый классом, используемый для удаления всех элементов из коллекции.

public void clear()

Функция метода

clear()Основная функция метода — очиститьVectorвсе элементы в нем, превращая его в пустую коллекцию. После вызова этого метода,Vectorизsize()вернет 0, ноcapacity()остаётся неизменной.

Ключевые особенности

  • RemoveVectorвсе элементы в нем
  • будетVectorРазмер сбрасывается на 0
  • Не изменяетVectorемкость
  • Временная сложность этой операции — O(n), где n —Vectorразмер

Принцип реализации метода

В JavaVectorкласс,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()этот метод также синхронизирован и может безопасно использоваться в многопоточной среде.

Отличие от ArrayList

ХотяArrayListтакже имеетclear()метод, ноVectorизclear()синхронизирован, тогда какArrayList— нет:

Пример

// clear() в Vector синхронизирован
public synchronized void clear() {
    removeAllElements();
}

// clear() в ArrayList не синхронизирован
public void clear() {
    modCount++;
    for (int i = 0; i < size; i++)
        elementData[i] = null;
    size = 0;
}

ЧАВО

Вопрос 1: освобождает ли метод clear() память?

clear()Метод устанавливает все ссылки на элементы вnull, что позволяет сборщику мусора освободить эти объекты (если на них нет других ссылок). Однако,Vectorсам внутренний массив не будет освобождён, очищаются только его элементы.

Вопрос 2: В чём разница между clear() и new Vector()?

  • clear()Повторно использует существующийVectorобъект, только очищает его элементы
  • new Vector()Создаёт совершенно новыйVectorобъект, а старыйVectorбудет собран сборщиком мусора, если нет других ссылок

Вопрос 3: Как определить, пуст ли Vector?

Вы можете использоватьisEmpty()метод:

Пример

Vector<String> v = new Vector<>();
v.clear();
if (v.isEmpty()) {
    System.out.println("Vector is empty");
}

Итог

Vectorизclear()Этот метод — простое, но практичное средство для быстрой очистки всех элементов в коллекции. Понимание принципа его работы и особенностей помогает писать более эффективный код Java. Помните о его особенностях, связанных с ёмкостью и потокобезопасностью, а также о лучших практиках в конкретных сценариях.

Java Vector Java Vector

Другие расширения