Java Collection Framework | ArrayList, Vector, LinkedList (1)

Java опрос
Java Collection Framework | ArrayList, Vector, LinkedList (1)

Это седьмой день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления

Поскольку три общих класса коллекций, ArrayList, Vector и LinkedList, реализуют интерфейс List (интерфейс List наследует интерфейс Collection), в чем же разница между ними?

List.png

1. Сравнение ArrayList и Vector

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

Так в чем же основное различие между ними?

С точки зрения синхронности

Vector является потокобезопасным.Так называемая потокобезопасность означает, что при доступе нескольких потоков к общим ресурсам атомарность, видимость и последовательность могут быть гарантированы одновременно. Реализация безопасности векторных потоков заключается в использованииsynchronizedКлючевое слово, о принципе действия этого ключевого слова я в статье«Не паникуйте, когда вы находитесь в лицо | Эта статья даст вам другое понимание Synchronized»Было упомянуто, заинтересованные друзья, добро пожаловать на просмотр.

Для ArrayList это небезопасно для потоков, и вся реализация не вводит никакого механизма для блокировки общих ресурсов.

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

от роста данных

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

Если количество сохраняемых элементов превышает емкость текущего массива, ArrayList увеличится на 50% от текущего размера массива, а Vector увеличится на 100%. То есть ArrayList увеличивается в 0,5 раза, а Vector увеличивается в 1 раз.

С точки зрения обхода

Вектор можно использовать одновременноEnumerationа такжеIteratorЕсть два способа обхода элементов, в то время как ArrayList может использовать толькоIteratorИтерирует через итераторы.

Основное отличие позади, так как же выбрать ArrayList и Vector?

  • Vector является потокобезопасным, а ArrayList — нет, поэтому, как правило, однопоточное использование ArrayListd многопоточное использование Vector.
  • Если мы не знаем, сколько данных будет, но знаем скорость роста данных, Vector имеет большее преимущество, потому что он может установить значение роста расширения.
  • ArrayList быстрее для операций обновления.Если нет особых требований, рекомендуется использовать ArrayList.

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

  • Collections.synchronizedList
  • CopyOnWriteArrayList

Продолжение следует, разница между тремя будет проанализирована в целом завтра!