ArrayList vs Vector
Вектор реализует массивы, которые могут увеличиваться / уменьшаться во время выполнения, когда некоторые элементы добавляются или удаляются из него. Доступ к его элементам осуществляется с помощью целочисленного индекса. Два поля - емкость и приращение емкости, характеризуют векторное управление памятью. Он реализует четыре интерфейса:
* Список
* Случайный доступ
* Клонируемый
* Сериализуемые интерфейсы
ArrayList, как и векторы, также реализует четыре интерфейса. Опять же, как и векторы, его размер может меняться во время выполнения. Кроме того, у него есть поле, называемое емкость, размер которого равен размеру ArrayList.
Оба вектора и ArrayList хороши для извлечения элементов из любой позиции, а также для вставки или удаления элементов из конца класса контейнера..
С точки зрения API, оба вектора, а также ArrayList очень похожи. Так в чем же заключается разница между ними? Следующие пункты помогут пролить свет на этот вопрос:
1. Синхронизация: векторы синхронизируются, а ArrayList - нет. Если вы добавляете или удаляете элементы из ArrayList, это называется структурной модификацией. Когда несколько потоков обращаются к ArrayList одновременно с блоком кода, модифицирующего список, необходимо синхронизировать список извне. Короче говоря, векторное содержимое является поточно-ориентированным, а ArrayList - нет. Если в требовании не упоминается потокобезопасная коллекция, следует выбрать ArrayList, поскольку синхронизация влияет на производительность. Несинхронизированные ArrayLists быстры.
2. Увеличение объема данных. Как элементы ArrayList, так и векторные элементы хранятся в виде массивов, но для векторов размер по умолчанию равен 10, а для ArrayList размер по умолчанию отсутствует. Когда кто-либо добавляет элемент либо в ArrayList, либо в вектор, существует вероятность того, что любому классу не хватит места. В таком случае по умолчанию вектор удваивает свой размер, а размер ArrayList увеличивается на 50%. Вы можете установить значение приращения в случае векторов, которые невозможны для ArrayList.
3. Обход элементов: ArrayList имеет здесь преимущество, поскольку вы можете получить доступ к его элементам, просто используя индекс. В случае векторов вам нужно создать итератор для обхода его элементов.
Резюме:
1. Если класс контейнера должен быть изменен одним потоком или какой-либо локальной переменной, тогда вы должны использовать ArrayList.
2.Если доступ к классу контейнера осуществляется несколькими потоками, используйте векторы, иначе вам придется выполнить синхронизацию вручную..
3.Мы можем указать размер приращения с вектором и с ArrayList мы не можем.
4. Вектор синхронизирован, а ArrayList не.
5. Вектор может увеличить размер в два раза; ArrayList может увеличить его на 50%.