Что такое класс Vector в Java и чем он отличается от ArrayList?

«Что такое класс Vector в Java и чем он отличается от ArrayList?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Vector — это устаревший (legacy) класс из Java 1.0, реализующий интерфейс List с помощью изменяемого массива. Его ключевая особенность — синхронизированные методы, обеспечивающие потокобезопасность на уровне отдельных операций.

Основные отличия от ArrayList: Вектор (Vector) Список массивов (ArrayList)
Методы синхронизированы (thread-safe) Методы не синхронизированы (более быстрые)
Увеличивает capacity на 100% при переполнении (по умолчанию) Увеличивает capacity на 50%
Считается legacy, не рекомендуется для нового кода Стандартная реализация List для несинхронизированных сценариев
Имеет устаревший метод addElement() Не имеет таких методов

Пример использования Vector:

import java.util.Vector;

public class VectorExample {
    public static void main(String[] args) {
        Vector<String> vector = new Vector<>();
        vector.add("Java");
        vector.add("Vector");
        System.out.println(vector.get(0)); // Java
        System.out.println(vector.size()); // 2
    }
}

Почему Vector считается устаревшим?

  1. Низкая производительность: Синхронизация на уровне каждого метода создает издержки, даже в однопоточных приложениях.
  2. Устаревшая модель синхронизации: Для потокобезопасности лучше использовать либо Collections.synchronizedList(new ArrayList<>()), либо конкурентные коллекции из java.util.concurrent (например, CopyOnWriteArrayList).

Вывод: Используйте ArrayList по умолчанию. Если нужна потокобезопасность, выберите более современную альтернативу из java.util.concurrent.