logo

Різниця між ArrayList і LinkedList

ArrayList і LinkedList реалізують інтерфейс List і підтримують порядок вставки. Обидва є несинхронізованими класами.

код abs c

Однак існує багато відмінностей між класами ArrayList і LinkedList, які наведені нижче.

ArrayListLinkedList
1) ArrayList внутрішньо використовує a динамічний масив для зберігання елементів.LinkedList внутрішньо використовує a двозв'язаний список для зберігання елементів.
2) Маніпуляції з ArrayList є повільний оскільки він внутрішньо використовує масив. Якщо будь-який елемент видаляється з масиву, усі інші елементи зміщуються в пам’яті.Маніпуляція з LinkedList є швидше ніж ArrayList, тому що він використовує подвійний зв’язаний список, тому не потрібно зміщувати біти в пам’яті.
3) Клас ArrayList може діяти як список лише тому, що він реалізує лише список.Клас LinkedList може виконувати роль списку та черги обидва, оскільки він реалізує інтерфейси List і Deque.
4) ArrayList є краще для зберігання та доступу даних.LinkedList є краще для маніпулювання даних.
5) Розташування пам’яті для елементів ArrayList є безперервним.Розташування елементів пов’язаного списку не є заразним.
6) Як правило, коли ArrayList ініціалізовано, йому призначається ємність за замовчуванням 10.У LinkedList немає випадків ємності за замовчуванням. У LinkedList порожній список створюється під час ініціалізації LinkedList.
7) Якщо бути точним, ArrayList — це масив змінного розміру.LinkedList реалізує подвійний зв’язаний список інтерфейсу списку.

Приклад ArrayList і LinkedList у Java

Давайте подивимося на простий приклад, де ми використовуємо як ArrayList, так і LinkedList.

Ім'я файлу: TestArrayLinked.java

 import java.util.*; class TestArrayLinked{ public static void main(String args[]){ List al=new ArrayList();//creating arraylist al.add('Ravi');//adding object in arraylist al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); List al2=new LinkedList();//creating linkedlist al2.add('James');//adding object in linkedlist al2.add('Serena'); al2.add('Swati'); al2.add('Junaid'); System.out.println('arraylist: '+al); System.out.println('linkedlist: '+al2); } } 
Перевірте зараз

Вихід:

arraylist: [Ravi,Vijay,Ravi,Ajay] linkedlist: [James,Serena,Swati,Junaid] 

Пункти, які слід пам’ятати

Нижче наведено деякі важливі моменти, про які слід пам’ятати щодо ArrayList і LinkedList.

  • Якщо швидкість додавання або видалення перевищує кількість сценаріїв читання, використовуйте LinkedList. З іншого боку, коли частота сценаріїв читання перевищує швидкість додавання або видалення, ArrayList має пріоритет над LinkedList.
  • Оскільки елементи ArrayList зберігаються більш компактно порівняно з LinkedList; отже, ArrayList є більш дружнім до кешу порівняно з LinkedList. Таким чином, шанси промаху в кеші менші в ArrayList порівняно з LinkedList. Як правило, вважається, що LinkedList має низьку кеш-локальність.
  • Накладні витрати пам’яті в LinkedList більші, ніж у ArrayList. Це тому, що в LinkedList у нас є два додаткових посилання (наступний і попередній), оскільки потрібно зберігати адреси попереднього та наступного вузлів, і ці посилання займають додатковий простір. Такі посилання відсутні в ArrayList.