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

ArrayList срещу Vector

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



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

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

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

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

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

Резюме:

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