Как изменится емкость (capacity) Vector в Java при добавлении 11-го элемента, если начальная емкость равна 10?

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

Ответ

Поведение зависит от конструктора, которым был создан Vector.

1. По умолчанию (удвоение): Если Vector создан с начальной емкостью (capacity) 10 и без указания capacityIncrement, то при добавлении 11-го элемента его емкость удвоится (станет 20).

Vector<Integer> vec = new Vector<>(10); // capacity=10, capacityIncrement=0
for (int i = 0; i < 10; i++) vec.add(i); // size=10, capacity=10
vec.add(10); // Триггер увеличения. Новая capacity = 10 * 2 = 20

2. С заданным приращением: Если Vector создан с указанием capacityIncrement, емкость увеличится на эту величину.

Vector<Integer> vec = new Vector<>(10, 5); // capacity=10, increment=5
for (int i = 0; i < 10; i++) vec.add(i); // size=10, capacity=10
vec.add(10); // Триггер увеличения. Новая capacity = 10 + 5 = 15

Принцип работы:

  • Внутри Vector использует массив для хранения элементов.
  • Поле capacityIncrement определяет, на сколько увеличивать массив при переполнении. Если оно равно 0, применяется стратегия удвоения.
  • Увеличение происходит автоматически при вызове методов добавления (add, addElement), когда size становится равен capacity.

Сравнение с ArrayList: ArrayList всегда увеличивает емкость примерно в 1.5 раза (старая емкость + старая емкость >> 1), и у него нет параметра capacityIncrement.