Почему Vector считается устаревшим (legacy) классом в Java?

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

Ответ

Vector считается устаревшим (legacy), потому что его все методы синхронизированы по умолчанию. Это приводит к ненужным накладным расходам на блокировки в однопоточных сценариях, нарушая принцип "не плати за то, что не используешь".

Современная альтернатива — ArrayList:

  • Не синхронизирован, поэтому быстрее.
  • При необходимости синхронизации можно явно обернуть: List<String> syncList = Collections.synchronizedList(new ArrayList<>());.
  • Для высококонкурентных сред лучше использовать CopyOnWriteArrayList или коллекции из java.util.concurrent.

Пример замены:

// Устаревший подход (избыточная синхронизация)
Vector<String> oldVector = new Vector<>();

// Современный подход (синхронизация по требованию)
List<String> modernList = Collections.synchronizedList(new ArrayList<>());

Вывод: Vector сохраняется для обратной совместимости, но в новом коде его использование не рекомендуется.