Різниця між ArrayList та LinkedList на Java

Автор: Laura McKinney
Дата Створення: 3 Квітень 2021
Дата Оновлення: 15 Травень 2024
Anonim
Урок по Java 51: Сортировка коллекций и интерфейсы - Comparable и Comparator
Відеоролик: Урок по Java 51: Сортировка коллекций и интерфейсы - Comparable и Comparator

Зміст


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

Обговоримо ще кілька відмінностей між ArrayList та LinkedList за допомогою таблиці порівняння, показаної нижче.


  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

Основа для порівнянняArrayListLinkedList
Основні ArrayList дозволяє випадковий доступ до елементів у списку.LinkedList не дозволяє випадковий доступ до елементів у списку.
Структура данихВнутрішня структура, що використовується для зберігання елементів, - це динамічний масив.Внутрішня структура, що використовується для зберігання елементів, є подвійним списком посилань.
ПодовжуєArrayList розширює клас AbstarctList.LinkedList розширює AbstractSequentialList.
ЗдійсненняAbstractList реалізує інтерфейс списку.LinkedList реалізує Список, Deque, Чергу.
Доступ Доступ до елементів у списку швидший у ArrayList.Доступ до елементів у списку повільніший у LinkedList.
МаніпуляціяУ ArrayList маніпуляція елементами у списку повільніше.Маніпуляція елементами у списку швидше в LinkedList.
ПоведінкаArraylList веде себе як List, коли реалізує список.LinkedList поводиться як List a, так і Черга, оскільки реалізує List і Queue.


Визначення ArrayList

The AbstractList клас визначається Рамка колекцій. Він поширюється AbstarctList та знаряддя Список інтерфейс. ArrayList використовує динамічний масив тобто масив змінної довжини як внутрішня структура даних для зберігання елементів у списку. Потреба ArrayList виникає, оскільки масив у Java має фіксовану довжину. Тому він не може збільшуватися або зменшуватися в розмірі, оскільки елементи додаються або видаляються з масиву. Тому ви повинні знати заздалегідь розмір необхідного масиву. Але список масивів, реалізований за допомогою класу ArrayList, може збільшуватися і зменшуватися в розмірі, оскільки елементи додаються або видаляються з масиву.

До списку масивів, реалізованого за допомогою ArrayList, можна отримати доступ випадковим чином оскільки ArrayList працює на основі індексу. Отже, знаючи індекс, ви можете безпосередньо отримати доступ до елементу списку. Є три конструктори ArrayList:

ArrayList () ArrayList (Колекція <? Розширює E> c) ArrayList (int місткість)

The спочатку конструктор реалізує порожній список масивів. The другий конструктор реалізує список масивів, ініціалізований за допомогою Колекція c елементів. The третій конструктор реалізує список масивів із ємність наведені в аргументі. Працюючи з ArrayList, іноді вам знадобиться перетворити колекцію ArrayList в масив. Це можна зробити, зателефонувавши toArray ().

Визначення LinkedList

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

У класі LinkedList є два конструктори.

LinkedList () LinkedList (Колекція <? Розширює E> c)

The спочатку конструктор створює порожній пов'язаний список. The другий конструктор створює пов'язаний список, ініціалізований з елементами Колекція c.

У LinkedList маніпулювання списком легко та швидко. Це тому, що якщо ви додаєте або видаляєте будь-який елемент зі списку, тоді немає необхідності зміщувати елементи, як у ArrayList. Але доступ відбувається повільніше, оскільки він не має індексу для прямого доступу до елементів.

  1. Реалізація списку ArrayList може бути доступна випадковим чином, оскільки ArrayList приймає структуру даних масиву на основі індексу. З іншого боку, до списку, реалізованого LinkedList, не можна отримати доступ випадковим чином, оскільки для отримання або доступу до певного елемента у списку потрібно перейти до списку.
  2. Внутрішня структура даних, яка використовується ArrayList для зберігання елементів списку, є a динамічний масив які можуть рости або зменшуватися, коли елементи додаються або видаляються зі списку. Однак внутрішня структура даних, що використовується LinkedList для зберігання елементів у списку, є подвійний список.
  3. ArrayList розширює AbstractList клас, який також є класом Collection, тоді як клас LinkedList поширюється AbstractSequentialList клас, який знову є колекційним класом.
  4. Інструменти класу ArrayList Список інтерфейс, тоді як клас LinkedList реалізується Список, Чергу, і Деке інтерфейси.
  5. Доступ до елементів зі списку, реалізованого за допомогою ArrayList є швидше оскільки він має структуру даних на основі індексу. З іншого боку, в списку реалізації byLinkledList немає структури, заснованої на індексах. Отже, над списком застосовується ітератор, щоб досягти елемента, до якого можна отримати доступ, який робить доступ повільніше у LinkedList.
  6. Маніпуляція - це маніпуляція у списку, реалізованому за допомогою ArrayList, оскільки щоразу, коли елемент додається або видаляється зі списку, елементи у списку зміщуються, щоб прийняти зміни. З іншого боку, маніпуляція у списку, реалізованому LinkedList, швидше, оскільки не потребує переміщення елементів у списку при додаванні або видаленні елементів зі списку.
  7. ArrayList діє як список як він реалізує інтерфейс List, тоді як LinkedList виступає як список і чергу як він реалізує List, так і чергу.

Висновок:

Коли в списку часто додаються або видаляються елементи, необхідно використовувати LinkedList, оскільки він краще працює під час маніпуляцій. Якщо до списку застосовуються часті пошуки, найкращим вибором є ArrayList, оскільки він працює краще під час доступу до елементів зі списку.