1) Базова структура даних
Перша відмінність між ArrayList і LinkedList полягає в тому, що ArrayList підтримується Array, тоді як LinkedList підтримується LinkedList. Це призведе до подальших відмінностей у роботі.
2) LinkedList реалізує Deque
Ще одна відмінність між ArrayList і LinkedList полягає в тому, що крім інтерфейсу List, LinkedList також реалізує інтерфейс Deque, який забезпечує перші операції додавання () та опитування () та декілька інших функцій Deque. 3) Додавання елементів у ArrayList Додавання елемента в ArrayList - це операція O (1), якщо вона не викликає повторного розміру Array, у цьому випадку вона стає O (log (n)), з іншого боку, додаючи елемент у LinkedList - це операція O (1), оскільки вона не потребує навігації.
4) Видалення елемента з позиції
Для того, щоб вилучити елемент з певного індексу, наприклад, зателефонувавши на видалення (індекс), ArrayList виконує операцію копіювання, яка робить його близьким до O (n), тоді як LinkedList повинен перейти до тієї точки, яка також робить його O (n / 2) , оскільки він може переходити з будь-якого напрямку залежно від близькості.
5) Ітерація над ArrayList або LinkedList
Ітерація - це операція O (n) як для LinkedList, так і для ArrayList, де n - це число елемента.
6) Виведення елемента з позиції
Операція get (index) є O (1) в ArrayList, тоді як її O (n / 2) в LinkedList, оскільки їй потрібно пройти до цього запису. Хоча в позначенні Big O O (n / 2) - це просто O (n), оскільки ми ігноруємо там константи.
7) Пам'ять
LinkedList використовує об’єкт обгортки Entry, який є статичним вкладеним класом для зберігання даних та двох вузлів наступного та попереднього, тоді як ArrayList просто зберігає дані в Array.
Тому вимога пам'яті у випадку ArrayList здається меншою, ніж LinkedList, за винятком випадків, коли Array виконує операцію зміни розміру, коли копіює вміст з одного масиву в інший.
Якщо масив досить великий, то в цей момент може знадобитися багато пам'яті і запустити збір сміття, що може сповільнити час відгуку.
З усіх наведених вище відмінностей між ArrayList і LinkedList, схоже, що ArrayList є кращим вибором, ніж LinkedList майже у всіх випадках, за винятком випадків, коли ви робите часті операції додавання (), ніж видалення (), або get ().
Простіше змінити зв'язаний список, ніж ArrayList, особливо якщо ви додаєте або видаляєте елементи з початку чи кінця, оскільки зв'язаний список внутрішньо зберігає посилання на ці позиції, і вони доступні в O (1) час.
Іншими словами, вам не потрібно переходити через пов'язаний список, щоб дійти до позиції, куди потрібно додати елементи, у цьому випадку додавання стає операцією O (n). Наприклад, вставлення або видалення елемента в середині пов'язаного списку.
На мою думку, використовуйте ArrayList over LinkedList для більшості практичних цілей на Java.