Ну, вы можете создать векторы в Java , а также - Vector v = new Vector(3, 2);
sgsi
Никогда не используйте Vector, использование ArrayListили LinkedListилиArrayDeque
Ответы:
365
Различия
Векторы синхронизированы, ArrayLists нет.
Методы роста данных
Используйте ArrayLists, если нет особых требований использовать Векторы.
синхронизация
Если несколько потоков обращаются к ArrayList одновременно, мы должны внешне синхронизировать блок кода, который изменяет список либо структурно, либо просто изменяет элемент. Структурная модификация означает добавление или удаление элемента (ов) из списка. Установка значения существующего элемента не является структурной модификацией.
Collections.synchronizedList обычно используется во время создания списка, чтобы избежать случайного несинхронизированного доступа к списку.
Внутри ArrayList и Vector удерживают их содержимое с помощью Array. Когда элемент вставляется в ArrayList или Vector, объект должен будет расширить свой внутренний массив, если ему не хватает места. Вектор по умолчанию удваивает размер своего массива, а ArrayList увеличивает размер массива на 50 процентов.
Как насчет READING из ArrayList в многопоточном режиме? Это потокобезопасно?
Xunie
@Xunie Чтение из ArrayList или других классов коллекций никогда не будет проблемой. Проблема возникает при добавлении, удалении или изменении существующих значений в ArrayList или коллекции.
Сайнат Редди
85
Как сказано в документации, a Vectorи a ArrayListпочти эквивалентны. Разница в том, что доступ к a Vectorсинхронизирован, а доступ к a ArrayListнет. Это означает, что только один поток может одновременно вызывать методы для Vectora, и при получении блокировки возникают небольшие накладные расходы; если вы используете ArrayList, это не так. Как правило, вы хотите использовать ArrayList; в однопоточном случае это лучший выбор, а в многопоточном случае вы получаете лучший контроль над блокировкой. Хотите разрешить одновременное чтение? Хорошо. Хотите выполнить одну синхронизацию для партии из десяти записей? Тоже все в порядке. Это требует немного большей заботы с вашей стороны, но это, вероятно, то, что вы хотите. Также обратите внимание, что если у вас есть ArrayList, вы можете использоватьCollections.synchronizedListфункция для создания синхронизированного списка, таким образом, вы получаете эквивалент a Vector.
синхронизированы, но не безопасны? что это значит? [Я начинающий]
Динешкумар
13
@Dineshkumar Vectorбыл задуман как ориентированный на многопотоковое исполнение, но имеет конструктивный недостаток, который делает его * на самом деле не безопасным для работы с потоками. По сути, это устаревший класс. По некоторым причинам, университеты и т.д. не слышали об этой новости и все еще поддерживают ее использование.
Можете ли вы поддержать иск, предоставив доказательства 20-30% faster?
пользователь
5
@user В то время это был просто личный опыт, когда ты копался в огромных массивах. Спустя три года я не могу точно указать, о чем я говорил, но есть множество ориентиров. Это не до тех пор, пока в потоке, где вы видите самые большие прыжки, но вот один: javacodegeeks.com/2010/08/…
Оли
20-30% совпадают, только если вы читаете И пишете в Vector / Arraylist, так как функция роста окажет наибольшее влияние. Если у вас есть тест, который пишет только один раз, а затем выполняет только чтение, вы получите другой результат
Тоби
2
Пожалуйста, предоставьте подтверждение ваших данных
wiredmark
Поскольку вектор синхронизирован, а arraylist не синхронизирован, это может быть причиной, arraylist быстрее, чем vector.
Спросите
23
Существует два основных различия между Vector и ArrayList.
Вектор синхронизирован по умолчанию, а ArrayList - нет. Примечание. ArrayList также можно синхронизировать, передав объект arraylist в метод Collections.synchronizedList (). Синхронизированное средство: его можно использовать с несколькими потоками без каких-либо побочных эффектов.
ArrayLists увеличиваются на 50% по сравнению с предыдущим размером, когда места недостаточно для нового элемента, тогда как Vector будет увеличиваться на 100% по сравнению с предыдущим размером, когда нет места для нового входящего элемента.
Помимо этого, есть некоторые практические различия между ними с точки зрения программирования:
Чтобы получить элемент в определенном месте из Vector, мы используем функцию elementAt (int index). Название этой функции очень длинное. Вместо этого в ArrayList у нас есть get (int index), который очень легко запомнить и использовать.
Точно так же, чтобы заменить существующий элемент новым элементом в Vector, мы используем метод setElementAt (), который снова очень длинный и может раздражать программиста для повторного использования. Вместо этого ArrayList имеет метод add (int index, object), который легко использовать и запоминать. Таким образом, они имеют более дружественный к программисту и простой в использовании имена функций в ArrayList.
Когда использовать какой?
Старайтесь избегать использования векторов полностью. ArrayLists могут делать все, что может делать вектор. Более того, ArrayLists по умолчанию не синхронизированы. Если вы хотите, вы можете синхронизировать его, когда вам нужно, используя класс утилит Collections.
ArrayList имеет легко запомнить и использовать имена функций.
Примечание : даже если arraylist увеличивается на 100%, вы можете избежать этого с помощью метода surecapacity (), чтобы убедиться, что вы выделяете достаточно памяти на самих начальных этапах.
Vector приращение 100% означает удваивает размер массива, если общее количество элементов превышает его емкость.
Vector это унаследованный класс
Vector медленный, потому что он синхронизирован, т.е. в среде с многопоточностью, он будет удерживать другие потоки в работоспособном или неработоспособном состоянии, пока текущий поток не снимет блокировку объекта.
Vectorиспользует интерфейс перечисления для прохождения элементов. Но он также может использовать Iterator.
В основном и ArrayList, и Vector используют внутренний объектный массив.
ArrayList: класс ArrayList расширяет AbstractList и реализует интерфейс List и RandomAccess (интерфейс маркера). ArrayList поддерживает динамические массивы, которые могут расти по мере необходимости. Это дает нам первую итерацию по элементам. ArrayList использует внутренний объект Array; они создаются с начальным размером по умолчанию, равным 10. При превышении этого размера коллекция автоматически увеличивается до половины размера по умолчанию, равного 15.
Vector: Vector аналогичен ArrayList, но различия заключаются в том, что он синхронизируется, и его начальный размер по умолчанию равен 10, а когда размер превышает его, увеличивается в два раза по сравнению с исходным размером, что означает, что новый размер будет равен 20. Вектор является единственным классом. кроме ArrayList для реализации RandomAccess. Вектор имеет четыре конструктора, из которых один принимает два параметра. Вектор (int initialCapacity, intacityIncrement) CapacityIncrement - это величина, на которую увеличивается емкость при переполнении вектора, поэтому он имеет больший контроль над коэффициентом загрузки.
Почему добавление объекта сначала и в конце в LinkedList происходит медленно? Разве это не должно быть быстрее, чем ОБРАТНЫЙ массив или вектор?
CHANist
@ CHANist Я тоже согласен. Добавление объекта в начале и в конце должно быть быстрее, чем добавление объекта в его середине.
Рахул Растоги
1
Язык, используемый в столбце LinkedList этой таблицы, противоречив. И добавление, и добавление в LinkedList выполняются быстрее, чем добавление элементов в середине, но медленнее, чем добавление или добавление в ArrayLists или Vectors. Это связано с тем, что каждая вставка требует выделения памяти с нелокальными ссылками, что увеличивает вероятность пропадания кэша. Несмотря на то, что поиск в LinkedList является линейным с количеством элементов и указатель на конец не сохраняется, добавление происходит все же быстрее, чем предварительное, поскольку память перераспределяется только для одного элемента.
Vector v = new Vector(3, 2);
Vector
, использованиеArrayList
илиLinkedList
илиArrayDeque
Ответы:
Различия
Используйте ArrayLists, если нет особых требований использовать Векторы.
синхронизация
Если несколько потоков обращаются к ArrayList одновременно, мы должны внешне синхронизировать блок кода, который изменяет список либо структурно, либо просто изменяет элемент. Структурная модификация означает добавление или удаление элемента (ов) из списка. Установка значения существующего элемента не является структурной модификацией.
Collections.synchronizedList
обычно используется во время создания списка, чтобы избежать случайного несинхронизированного доступа к списку.Ссылка
Рост данных
Внутри ArrayList и Vector удерживают их содержимое с помощью Array. Когда элемент вставляется в ArrayList или Vector, объект должен будет расширить свой внутренний массив, если ему не хватает места. Вектор по умолчанию удваивает размер своего массива, а ArrayList увеличивает размер массива на 50 процентов.
Ссылка
источник
Как сказано в документации, a
Vector
и aArrayList
почти эквивалентны. Разница в том, что доступ к aVector
синхронизирован, а доступ к aArrayList
нет. Это означает, что только один поток может одновременно вызывать методы дляVector
a, и при получении блокировки возникают небольшие накладные расходы; если вы используетеArrayList
, это не так. Как правило, вы хотите использоватьArrayList
; в однопоточном случае это лучший выбор, а в многопоточном случае вы получаете лучший контроль над блокировкой. Хотите разрешить одновременное чтение? Хорошо. Хотите выполнить одну синхронизацию для партии из десяти записей? Тоже все в порядке. Это требует немного большей заботы с вашей стороны, но это, вероятно, то, что вы хотите. Также обратите внимание, что если у вас есть ArrayList, вы можете использоватьCollections.synchronizedList
функция для создания синхронизированного списка, таким образом, вы получаете эквивалент aVector
.источник
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
не синхронизируется.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 - это величина, на которую увеличивается емкость при переполнении вектора, поэтому он имеет больший контроль над коэффициентом загрузки.
Некоторые другие различия:
источник