Ответ
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 считается устаревшим?
- Низкая производительность: Синхронизация на уровне каждого метода создает издержки, даже в однопоточных приложениях.
- Устаревшая модель синхронизации: Для потокобезопасности лучше использовать либо
Collections.synchronizedList(new ArrayList<>()), либо конкурентные коллекции изjava.util.concurrent(например,CopyOnWriteArrayList).
Вывод: Используйте ArrayList по умолчанию. Если нужна потокобезопасность, выберите более современную альтернативу из java.util.concurrent.