Різниця між ArrayList та вектором

ArrayList vs Vector

Вектор реалізує масиви, які можуть зростати / стискатися під час виконання, коли деякі елементи додаються або видаляються з нього. До його елементів звертається за допомогою цілого індексу. Два поля - збільшення ємності та нарощування ємності, характеризують управління векторними сховищами. Він реалізує чотири інтерфейси:
* Список
* Випадковий доступ
* Cloneable
* Інтерфейси, що піддаються серіалізації

ArrayList, як і вектори, також реалізує чотири інтерфейси. Знову ж таки, як і вектори, його розмір може змінюватися під час виконання. Також у нього є поле, яке називається ємність, розмір якого такий же, як розмір ArrayList.

І вектори, і ArrayList корисні для отримання елементів з будь-якої позиції, а також для вставки або видалення елементів з кінця класу контейнерів.
З точки зору API, обидва вектори, як і ArrayList, дуже схожі. Тож де саме криється різниця між ними? Наступні пункти пролиють трохи світла на цю тему:

1. Синхронізація: вектори синхронізовані, але ArrayList - ні. Якщо ви додаєте або видаляєте елементи з ArrayList, це називається структурною модифікацією. Коли кілька потоків звертаються до ArrayList одночасно з кодом, що модифікує список, тоді потрібно синхронізувати список. Коротше кажучи, векторний вміст є безпечним для потоків, тоді як ArrayList - ні. Якщо вимога не згадує безпечну для потоків колекцію, тоді слід вибрати ArrayList, коли синхронізація досягає продуктивності. Несинхронізовані списки масивів швидко.

2. Зростання даних: і елементи ArrayList, і вектор зберігаються у вигляді масивів, але вектори мають розмір за замовчуванням 10, а ArrayList не має розміру за замовчуванням. Коли ви додаєте елемент або в ArrayList, або в вектор, є ймовірність, що будь-який клас може закінчитися. У такому випадку за замовчуванням вектор удвічі збільшує свій розмір, тоді як розмір ArrayList збільшується на 50%. Ви можете встановити значення приросту у випадку векторів, що неможливо для ArrayList.

3. Огляд елементів: ArrayList має тут перевагу, оскільки ви можете отримати доступ до його елементів, просто скориставшись індексом. Що стосується векторів, вам потрібно створити ітератор для переходу його елементів.

Підсумок:

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