Разлика между ArrayList и Vector

ArrayList срещу Vector

Вектор реализира масиви, които могат да нарастват / свиват по време на изпълнение, когато някои елементи се добавят или премахват от него. Достъп до неговите елементи се използва индекс с цяло число. Две полета - увеличаване на капацитета и капацитета, характеризират управлението на векторното съхранение. Той реализира четири интерфейса:
* Списък
* Случаен достъп
* Клонируем
* Сериализируеми интерфейси

ArrayList, също като векторите, също реализира четири интерфейса. Отново, като векторите, размерът му може да се променя по време на изпълнение. Освен това той има поле, наречено капацитет, чийто размер е толкова голям, колкото размерът на ArrayList.

И векторите, и ArrayList са добри за извличане на елементи от всяка позиция, а също и за вмъкване или изтриване на елементи от края на контейнерния клас.
От гледна точка на API и двата вектора, както и ArrayList са много сходни. И така, къде точно се крие разликата между двете? Следните точки ще хвърлят малко светлина по този въпрос:

1. Синхронизация: Векторите се синхронизират, но ArrayList не е. Ако добавите или изтриете елементи от ArrayList, това се означава като структурна модификация. Когато няколко нишки имат достъп до ArrayList едновременно с блок от кодове, променящи списъка, тогава трябва да се синхронизира външно списъка. Накратко, векторното съдържание е безопасно за конци, докато ArrayList не. Ако изискването не споменава колекцията, обезопасена за конци, тогава трябва да изберете ArrayList, тъй като синхронизацията постига ефективност. Несинхронизираните списъци с масиви са бързи.

2. Нарастване на данните: И ArrayList, и векторните елементи се съхраняват като масиви, но векторите имат размер по подразбиране 10, а ArrayList няма размер по подразбиране. Когато човек добави елемент към ArrayList или вектор, има вероятност всеки клас да изтече от място. В такъв случай по подразбиране Vector удвоява размера си, докато размерът на ArrayList се увеличава с 50%. Можете да зададете инкрементна стойност в случай на вектори, които не са възможни за ArrayList.

3. Преминаване на елементите: ArrayList има предимство тук, тъй като можете да получите достъп до неговите елементи, като просто използвате индекс. В случая на вектори, трябва да създадете итератор, който да пресича неговите елементи.

Резюме:

1. Ако класът на контейнерите трябва да бъде променен от една нишка или някаква локална променлива, тогава трябва да използвате ArrayList.
2.Когато класът на контейнерите се осъществява чрез множество нишки, използвайте вектори, в противен случай ще трябва да направите ръчна синхронизация.
3. Можем да определим размера на инкремента с вектора и с ArrayList не можем.
4.Вектор се синхронизира и ArrayList не е.
5.А вектор може да увеличи размера двойно; ArrayList може да го увеличи с 50%.