ArrayList і LinkedList реалізують інтерфейс List і підтримують порядок вставки. Обидва є несинхронізованими класами.
код abs c
Однак існує багато відмінностей між класами ArrayList і LinkedList, які наведені нижче.
ArrayList | LinkedList |
---|---|
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.