9 ответов:
различия
- векторы синхронизированы, ArrayLists не.
- Методы Роста Данных
используйте ArrayLists, если нет конкретного требования к использованию векторов.
синхронизация
если несколько потоков обращаются к ArrayList одновременно, то мы должны внешне синхронизировать блок кода, который изменяет список либо структурно, либо просто изменяет элемент. Структурный модификация означает добавление или удаление элемента(ов) из списка. Установка значения существующего элемента не является структурной модификацией.
Collections.synchronizedListобычно используется во время создания списка, чтобы избежать любой случайный несинхронизируемый доступ к списку.рост данных
внутренне, как ArrayList, так и Vector удерживают свое содержимое с помощью массива. Когда элемент является вставленный в ArrayList или вектор, объект должен будет расширить свой внутренний массив, если он закончится. вектор по умолчанию удваивает размер своего массива, в то время как ArrayList увеличивает его размер на 50 процентов.
как говорится в документации, a
VectorиArrayListпрактически эквивалентны. Разница в том, что доступ кVectorсинхронизируется, тогда как доступ кArrayListнет. Что это означает, что только один поток может вызывать методы наVectorв то время, и есть небольшие накладные расходы на приобретение замка; если вы используетеArrayList, это не так. Как правило, вы хотите использоватьArrayList; в однопоточном случае это лучший выбор, и в многопоточном случае, вы получаете лучший контроль над замок. Хотите разрешить одновременное чтение? Штраф. Хотите выполнить одну синхронизацию для пакета из десяти записей? Тоже нормально. Это требует немного больше заботы с вашей стороны, но вполне вероятно, что вы хотите. Также обратите внимание, что если у вас есть ArrayList, можно использоватьCollections.synchronizedListфункция для создания синхронизированного списка, тем самым получая вам эквивалентVector.
VectorЭто сломанные класс не threadsafe, несмотря на то, что он "синхронизирован" и только используется студентами и другими неопытными программистами.
ArrayList-Это список применяемых профессионалами и опытными программистами.профессионалов, желающих список многопотоковое исполнение реализации использовать
CopyOnWriteArrayList.
ArrayListновее и на 20-30% быстрее.Если вам не нужно что-то явно очевидное в
VectorиспользуйтеArrayList
есть 2 основных дифференцирования между вектором и ArrayList.
вектор синхронизируется по умолчанию, а ArrayList-нет. Примечание: Вы можете также синхронизировать ArrayList, передавая объект arraylist в коллекции.synchronizedList() метод. Синхронизированные середины: его можно использовать с множественными потоками с вне любым побочным эффектом.
ArrayLists растут на 50% от предыдущего размера, когда пространство не достаточно для новый элемент, где в качестве вектора вырастет на 100% от предыдущего размера, когда нет места для нового входящего элемента.
кроме этого, есть некоторые практические различия между ними, с точки зрения программирования усилий:
- чтобы получить элемент в определенном месте из вектора мы используем elementAt (индекс int) функция. Это имя функции очень длинное. Вместо этого в ArrayList у нас есть get(индекс int) который очень легко запомнить и использовать.
- аналогично заменить существующий элемент на новый элемент в векторе мы используем setElementAt() метод, который снова очень длинный и может раздражать программиста, чтобы использовать его повторно. Вместо этого ArrayList имеет добавить (int index, object) метод, который прост в использовании и запоминании. Как это у них есть более программист дружественных и простых в использовании имен функций в список ArrayList.
когда использовать какое?
- старайтесь полностью избегать использования векторов. ArrayLists может делать все, что может сделать вектор. Более того, ArrayLists по умолчанию не синхронизированы. Если вы хотите, вы можете синхронизировать его, когда вам нужно, используя коллекции util class.
- ArrayList имеет легко запомнить и использовать имена функций.
Примечание: несмотря на то, что arraylist растет на 100%, вы можете избегайте этого с помощью метода ensurecapacity (), чтобы убедиться, что вы выделяете достаточную память на начальных этапах.
надеюсь, что это помогает.
ArrayListиVectorоба реализует интерфейс списка и поддерживает порядок вставки.Но есть много различий междуArrayListиVectorклассы...
ArrayListне синхронизируется.ArrayListувеличивает 50% от текущего размера массива, если количество элементов превышает его емкость.ArrayListне является устаревшим классом, он представлен в JDK 1.2.ArrayListбыстро, потому что он не синхронизирован.ArrayListиспользует интерфейс итератора для перебора элементов.вектор -
Vectorсинхронизируется.Vectorприращение 100% означает удвоение размера массива, если общее количество элементов превышает его емкость.
Vectorнаследие класс.
Vectorмедленно, потому что он синхронизирован, т. е. в многопоточной среде, он будет удерживать другие потоки в состоянии runnable или non-runnable, пока текущий поток не освободит блокировку объекта.
Vectorиспользует интерфейс перечисления для обхода элементов. Но он также может использовать итератор.Смотрите Также : https://www.javatpoint.com/difference-between-arraylist-and-vector
в основном и ArrayList и Vector оба используют внутренний массив объектов.
ArrayList: класс ArrayList расширяет AbstractList и реализует интерфейс List и RandomAccess (интерфейс маркера). Коллекции поддерживает динамические массивы, которые могут расти по мере необходимости. Это дает нам первую итерацию над элементами. ArrayList использует внутренний массив объектов; они создаются с начальным размером по умолчанию 10. При превышении этого размера коллекция автоматически увеличивается до половины размера по умолчанию, 15.
вектор: вектор похож на ArrayList, но различия есть, он синхронизирован и его начальный размер по умолчанию равен 10, а когда размер превышает его размер, увеличивается вдвое от исходного размера, что означает, что новый размер будет 20. Vector-это единственный класс, отличный от ArrayList для реализации RandomAccess. Вектор имеет четыре конструктора, из которых один принимает два параметра вектор(int initialCapacity, int capacityIncrement) capacityIncrement-это величина, на которую увеличивается емкость при переполнении вектора, поэтому она имеет больше контроля над коэффициентом нагрузки.
некоторые другие различия:
ArrayList Vs Vector:
1) синхронизации: ArrayList не синхронизирован, что означает, что несколько потоков могут работать на ArrayList одновременно. Например, если один поток выполняет операцию добавления в ArrayList, может быть другой поток, выполняющий операцию удаления в ArrayList одновременно в многопоточной среде
в то время как вектор синхронизации. Это означает, что если один поток работает на Векторе, никакой другой поток можно взять его в руки. В отличие от ArrayList, только один поток может выполнять операцию над вектором одновременно.
2) размеры: как ArrayList, так и Vector могут расти и сжиматься динамически для поддержания оптимального использования хранилища, однако способ их изменения отличается. ArrayList растет на половину своего размера при изменении размера, а Vector удваивает размер самого себя по умолчанию при росте.
3) производительность: ArrayList дает лучшую производительность, как это несинхронизированный. Векторные операции дают низкую производительность, поскольку они потокобезопасны, поток, который работает на Vector, получает блокировку на нем, что заставляет другой поток ждать, пока блокировка не будет освобождена.
4) fail-fast: сначала позвольте мне объяснить, что такое fail-fast: если коллекция (ArrayList, vector и т. д.) структурно модифицируется любыми средствами, кроме методов добавления или удаления итератора, после создания итератора итератор будет бросать ConcurrentModificationException. Структурная модификация относится к добавлению или удалению элементов из коллекции.
в соответствии с вектором javadoc перечисление, возвращаемое вектором, не является быстрым. С другой стороны, Iterator и listIterator возвращаемых класса ArrayList являются сбоем быстро.
5) кто на самом деле принадлежит к коллекции framework? Вектор не был частью структуры коллекции, он был включен в коллекции позже. Его можно рассматривать как устаревший код. Нет ничего о Вектор, который коллекция списка не может сделать. Поэтому вектор следует избегать. Если есть необходимость потокобезопасной работы, сделайте ArrayList синхронизированным, как описано в следующем разделе этого сообщения, или используйте CopyOnWriteArrayList, который является потокобезопасным вариантом ArrayList.
есть немного сходство между этими классами, которые являются следующими:
как векторные, так и ArrayList использовать
growable array data structure. Iterator и listIterator возвращаемых этих классов (векторная и ArrayList) arefail-fast. Они обаordered collectionклассы, поскольку они поддерживают порядок вставки элементов. Вектор & ArrayList обаallows duplicate and null values. Они оба растут и сжимаются автоматически, когда происходит переполнение и удаление.
вектор синхронизируется по умолчанию, а ArrayList-нет. Вас заметить можете сделать коллекцию ArrayList также синхронизируется путем передачи объекта ArrayList для Коллекции.synchronizedList() метод. Синхронизированные середины : он может используйте с множественными потоками с вне любым побочным эффектом.
ArrayLists растут на 50% от предыдущего размера, когда пространство не является достаточно для нового элемента, где как вектор будет расти на 100% прежний размер, когда нет места для нового входящий элемент.

Comments