ArrayList против векторов
1. Синхронизация и поточная безопасность
Первое и главное отличие между Vector и ArrayList состоит в том, что Vector синхронизирован, а ArrayList - нет, это означает, что все методы, которые структурно изменяют Vector, например, add ()
или remove ()
синхронизируются, что делает его поточно-ориентированным и позволяет безопасно использовать его в многопоточной и параллельной среде. С другой стороны, методы ArrayList не синхронизированы, поэтому не подходят для использования в многопоточной среде.
2. Скорость и производительность
ArrayList намного быстрее, чем Vector. Поскольку Vector синхронизирован и поточно-ориентирован, он платит за синхронизацию, что делает его немного медленным. С другой стороны, ArrayList не синхронизирован и быстр, что делает его очевидным выбором в однопоточной среде доступа.
3. Емкость
Всякий раз, когда Vector пересекает указанное пороговое значение, он увеличивается на значение, указанное в полеacityIncrement, в то время как вы можете увеличить размер ArrayList, вызывая метод ensureCapacity()
.
4. Перечисление и итератор
Vector может возвращать перечисление элементов, которые он хранит, вызывая метод elements()
, который не является быстрым при сбое, в отличие от Iterator и ListIterator
, возвращаемым ArrayList
.
5. Наследие
Еще один момент, о котором стоит помнить: Vector - это один из тех классов, который поставляется с JDK 1.0 и изначально не входит в состав Collection Framework, но в более поздней версии он был переработан для реализации интерфейса List, чтобы он мог стать частью Framework Collection