Емкость хранилища обоих списков может быть расширяемой или сокращаемой, Разработчики Java сделали его динамическим, чтобы поддерживать оптимальное использование хранилища. Однако у каждого свой метод. ArrayList увеличивается вдвое, в то время как Vector удваивает размер по умолчанию. Емкость ArrayList можно увеличить, вызвав метод
ensureCapacity().
4) fail-fastДля начала давайте разберемся, что такое fail-fast: если коллекция (ArrayList, Vector и т.д.) модифицирована, за исключением операций добавления и удаления итератора, то после создания итератора итератор вызовет исключение
ConcurrentModificationException. Изменение структуры связано с добавлением или удалением элементов из коллекции.
Vector возвращает объект перечисления, вызывая
elements() то есть не fail. С другой стороны, Iterator и ListIterator, возвращаемые ArrayList, являются отказоустойчивыми.
5) Кто на самом деле принадлежит к фреймворку коллекций?Vector является одним из тех классов, которые появились в JDK 1.0 и изначально не были частью фреймворка Collection, но в последней версии он был принят во внимание, потому что он реализует интерфейс List, так что, он стал частью collection.
Фреймворк ArrayList был введен после Vector с выпуском JDK 1.2. ArrayList был более продвинутым, чем Vector, но он также обладал всеми спецификациями Vector. Таким образом, люди начали использовать ArrayList вместо Vector, и в этом случае Vector стал устаревшим классом.
Когда использовать Vector и ArrayList?
Это зависит от ваших потребностей, если ваш код выполняет синхронизацию процессов (потоков), Vector будет лучшим выбором, поскольку он гарантирует, что только один поток обращается к коллекции в каждый момент времени.
Метод Операции синхронизации занимают много времени по сравнению с несинхронизированными операциями, поэтому, если ваше приложение должно работать быстрее и не нуждается в синхронизации, ArrayList будет правильным выбором с точки зрения производительности.
В этой таблице собраны 5 отличий, которые мы видели:
ArrayList | Vector |
1) ArrayList не синхронизирован. | Вектор синхронизирован |
2) ArrayList увеличивается на 50% от своего текущего размера, если количество элементов превышает его емкость | Vector invrementes 100%, это означает удвоение своего первоначального размера, если количество элементов превышает его емкость |
3) ArrayList был введен в JDK 1.2. | Vector появился в JDK 1.0 |
4) ArrayList быстрый, потому что он не синхронизирован | Vector медленный, потому что он синхронизирован. В конкурентной среде он будет блокировать доступ к другим процессам до тех пор, пока первый поток не разрешит доступ |
5) ArrayList использует Iterator для перебора элементов | Vector использует интерфейс Enumeration для перебора элементов, но, он также может использовать Iterator |