Gymterview
junior

Зачем добавили ArrayList, если уже был Vector

ArrayList добавили в Java 1.2 вместе с JCF, потому что синхронизация Vector оказалась неэффективной для большинства задач. В подавляющем большинстве случаев коллекция используется из одного потока, и накладные расходы на захват и освобождение монитора при каждом вызове метода бессмысленны.

Кроме того, поэлементная синхронизация Vector не решает проблему составных операций: если нужно атомарно проверить размер и вставить элемент, всё равно требуется внешняя синхронизация. ArrayList убрал ненужную синхронизацию и добавил оптимизированную стратегию роста (1.5x вместо 2x), что экономит память.

На собеседовании: объясните через принцип «не платите за то, что не используете». Синхронизация Vector не нужна в 95% случаев, а когда нужна — она недостаточна.