Метод clear() класса Java Vector
clear()Метод являетсяVectorобычный метод, предоставляемый классом, используемый для удаления всех элементов из коллекции.
public void clear()
Функция метода
clear()Основная функция метода — очиститьVectorвсе элементы в нем, превращая его в пустую коллекцию. После вызова этого метода,Vectorизsize()вернет 0, ноcapacity()остаётся неизменной.
Ключевые особенности
- Remove
Vectorвсе элементы в нем - будет
VectorРазмер сбрасывается на 0 - Не изменяет
Vectorемкость - Временная сложность этой операции — O(n), где n —
Vectorразмер
Принцип реализации метода
В JavaVectorкласс,clear()реализация метода фактически выполняется посредством вызоваremoveAllElements()метод:
Пример
removeAllElements();
}
removeAllElements()Внутренняя реализация метода перебираетVectorвсе элементы в нем и устанавливает каждую позицию вnull, и сбрасывает счетчик элементов в 0.
Анализ исходного кода
Пример
modCount++;
// Установить все элементы в null
for (int i = 0; i < elementCount; i++)
elementData[i] = null;
elementCount = 0; // Сбросить счетчик элементов
}
Пример использования
Базовое использование
Пример
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()
Пример
numbers.add(1);
numbers.add(2);
numbers.add(3);
// clear() и removeAllElements() дают одинаковый результат
numbers.clear(); // Очистить Vector
// Эквивалентно
// numbers.removeAllElements();
Примечания
Ёмкость остаётся неизменной
clear()Метод только очищаетVectorэлементы в нём, но не изменяет его ёмкость. Если нужно одновременно уменьшить ёмкость, можно вызватьtrimToSize()метод:
Пример
items.add("A");
items.add("B");
items.add("C");
items.clear(); // Очистить элементы, ёмкость по-прежнему 20
items.trimToSize(); // Скорректировать ёмкость до текущего размера (0)
Потокобезопасность
Vectorявляется потокобезопасным,clear()этот метод также синхронизирован и может безопасно использоваться в многопоточной среде.
Отличие от ArrayList
ХотяArrayListтакже имеетclear()метод, ноVectorизclear()синхронизирован, тогда какArrayList— нет:
Пример
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()метод:
Пример
v.clear();
if (v.isEmpty()) {
System.out.println("Vector is empty");
}
Итог
Vectorизclear()Этот метод — простое, но практичное средство для быстрой очистки всех элементов в коллекции. Понимание принципа его работы и особенностей помогает писать более эффективный код Java. Помните о его особенностях, связанных с ёмкостью и потокобезопасностью, а также о лучших практиках в конкретных сценариях.
Java Vector