Это седьмой день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления
Поскольку три общих класса коллекций, ArrayList, Vector и LinkedList, реализуют интерфейс List (интерфейс List наследует интерфейс Collection), в чем же разница между ними?
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
Продолжение следует, разница между тремя будет проанализирована в целом завтра!