Каковы различия между ArrayList и Вектором?

Каковы различия между этими двумя структурами данных ArrayList и Вектор, и где необходимо использовать каждого из них?

344
задан Draken 10 May 2017 в 22:07
поделиться

3 ответа

Различия

  • Векторы синхронизированы, списки массивов не.
  • Методы роста данных

Используйте списки массивов, если нет особых требований к использованию векторов.

Синхронизация

Если несколько потоков обращаются к списку ArrayList одновременно, мы должны внешне синхронизировать блок кода, который модифицирует список либо структурно, либо просто модифицирует элемент. Структурная модификация означает добавление или удаление элемента (ов) из списка. Установка значения существующего элемента не является структурной модификацией.

Collections.synchronizedList обычно используется во время создания списка, чтобы избежать случайного несинхронизированного доступа к списку.

Ссылка

Рост данных

Внутри и ArrayList, и Vector сохраняют свое содержимое с помощью Array. Когда элемент вставляется в ArrayList или Vector, объект должен будет расширить свой внутренний массив, если ему не хватит места. По умолчанию Vector увеличивает размер своего массива вдвое, в то время как ArrayList увеличивает размер своего массива на 50 процентов.

Ссылка

356
ответ дан 23 November 2019 в 00:31
поделиться

Как сказано в документации, Vector и ArrayList почти эквивалентны. Разница в том, что доступ к Vector синхронизирован, а доступ к ArrayList - нет. Это означает, что только один поток может одновременно вызывать методы Vector, и есть небольшие накладные расходы на получение блокировки; если вы используете ArrayList, это не так. В целом, лучше использовать ArrayList; в однопоточном случае это лучший выбор, а в многопоточном случае вы получаете лучший контроль над блокировкой. Хотите разрешить одновременное чтение? Отлично. Хотите выполнить одну синхронизацию для партии из десяти записей? Тоже хорошо. Это потребует от вас немного больше заботы, но, скорее всего, это то, что вам нужно. Также обратите внимание, что если у вас есть ArrayList, вы можете использовать функцию Collections.synchronizedList для создания синхронизированного списка, получив таким образом эквивалент Vector.

85
ответ дан 23 November 2019 в 00:31
поделиться

ArrayList новее и на 20-30% быстрее.

Если вам не нужно что-то явно очевидное в Vector , используйте ArrayList

26
ответ дан 23 November 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: