Каковы различия между двумя структурами данных ArrayList и Vector , и где вы должны использовать каждую из них?
Vector v = new Vector(3, 2);
Каковы различия между двумя структурами данных ArrayList и Vector , и где вы должны использовать каждую из них?
Vector v = new Vector(3, 2);
Ответы:
Различия
Используйте ArrayLists, если нет особых требований использовать Векторы.
синхронизация
Если несколько потоков обращаются к ArrayList одновременно, мы должны внешне синхронизировать блок кода, который изменяет список либо структурно, либо просто изменяет элемент. Структурная модификация означает добавление или удаление элемента (ов) из списка. Установка значения существующего элемента не является структурной модификацией.
Collections.synchronizedList
обычно используется во время создания списка, чтобы избежать случайного несинхронизированного доступа к списку.
Рост данных
Внутри ArrayList и Vector удерживают их содержимое с помощью Array. Когда элемент вставляется в ArrayList или Vector, объект должен будет расширить свой внутренний массив, если ему не хватает места. Вектор по умолчанию удваивает размер своего массива, а ArrayList увеличивает размер массива на 50 процентов.
Как сказано в документации, a Vector
и a ArrayList
почти эквивалентны. Разница в том, что доступ к a Vector
синхронизирован, а доступ к a ArrayList
нет. Это означает, что только один поток может одновременно вызывать методы для Vector
a, и при получении блокировки возникают небольшие накладные расходы; если вы используете ArrayList
, это не так. Как правило, вы хотите использовать ArrayList
; в однопоточном случае это лучший выбор, а в многопоточном случае вы получаете лучший контроль над блокировкой. Хотите разрешить одновременное чтение? Хорошо. Хотите выполнить одну синхронизацию для партии из десяти записей? Тоже все в порядке. Это требует немного большей заботы с вашей стороны, но это, вероятно, то, что вы хотите. Также обратите внимание, что если у вас есть ArrayList, вы можете использоватьCollections.synchronizedList
функция для создания синхронизированного списка, таким образом, вы получаете эквивалент a Vector
.
Vector
это сломано класс, не поточно, несмотря на его «синхронизирован» и только используется студентами и другими неопытными программистами.
ArrayList
Реализация списка, используемая профессионалами и опытными программистами.
Профессионалы, которым нужна реализация Потокового списка, используют a CopyOnWriteArrayList
.
Vector
был задуман как ориентированный на многопотоковое исполнение, но имеет конструктивный недостаток, который делает его * на самом деле не безопасным для работы с потоками. По сути, это устаревший класс. По некоторым причинам, университеты и т.д. не слышали об этой новости и все еще поддерживают ее использование.
ArrayList
новее и на 20-30% быстрее.
Если вам не нужно что-то явно выраженное Vector
, используйтеArrayList
20-30% faster
?
Существует два основных различия между Vector и ArrayList.
Вектор синхронизирован по умолчанию, а ArrayList - нет. Примечание. ArrayList также можно синхронизировать, передав объект arraylist в метод Collections.synchronizedList (). Синхронизированное средство: его можно использовать с несколькими потоками без каких-либо побочных эффектов.
ArrayLists увеличиваются на 50% по сравнению с предыдущим размером, когда места недостаточно для нового элемента, тогда как Vector будет увеличиваться на 100% по сравнению с предыдущим размером, когда нет места для нового входящего элемента.
Помимо этого, есть некоторые практические различия между ними с точки зрения программирования:
Когда использовать какой?
Примечание : даже если arraylist увеличивается на 100%, вы можете избежать этого с помощью метода surecapacity (), чтобы убедиться, что вы выделяете достаточно памяти на самих начальных этапах.
Надеюсь, поможет.
ArrayList
и Vector
оба реализует интерфейс списка и поддерживает вставку order.but Есть много различий между ArrayList
и Vector
классами ...
ArrayList
не синхронизируется.ArrayList
увеличивает на 50% размер текущего массива, если количество элементов превышает его емкость.ArrayList
это не унаследованный класс, он представлен в JDK 1.2.ArrayList
быстрый, потому что он не синхронизирован.ArrayList
использует интерфейс Iterator для прохождения элементов.Вектор -
Vector
синхронизирован.Vector
приращение 100% означает удваивает размер массива, если общее количество элементов превышает его емкость.Vector
это унаследованный класс
Vector
медленный, потому что он синхронизирован, т.е. в среде с многопоточностью, он будет удерживать другие потоки в работоспособном или неработоспособном состоянии, пока текущий поток не снимет блокировку объекта.
Vector
использует интерфейс перечисления для прохождения элементов. Но он также может использовать Iterator.
Смотрите также: https://www.javatpoint.com/difference-between-arraylist-and-vector
В основном и ArrayList, и Vector используют внутренний объектный массив.
ArrayList: класс ArrayList расширяет AbstractList и реализует интерфейс List и RandomAccess (интерфейс маркера). ArrayList поддерживает динамические массивы, которые могут расти по мере необходимости. Это дает нам первую итерацию по элементам. ArrayList использует внутренний объект Array; они создаются с начальным размером по умолчанию, равным 10. При превышении этого размера коллекция автоматически увеличивается до половины размера по умолчанию, равного 15.
Vector: Vector аналогичен ArrayList, но различия заключаются в том, что он синхронизируется, и его начальный размер по умолчанию равен 10, а когда размер превышает его, увеличивается в два раза по сравнению с исходным размером, что означает, что новый размер будет равен 20. Вектор является единственным классом. кроме ArrayList для реализации RandomAccess. Вектор имеет четыре конструктора, из которых один принимает два параметра. Вектор (int initialCapacity, intacityIncrement) CapacityIncrement - это величина, на которую увеличивается емкость при переполнении вектора, поэтому он имеет больший контроль над коэффициентом загрузки.
Некоторые другие различия: