Разлика между ArrayList и LinkedList в Java

Автор: Laura McKinney
Дата На Създаване: 3 Април 2021
Дата На Актуализиране: 15 Може 2024
Anonim
Java SE. Урок 34. Коллекции ArrayList & LinkedList
Видео: Java SE. Урок 34. Коллекции ArrayList & LinkedList

Съдържание


ArrayList и LinkedList са колекция класове и двамата изпълняват списък интерфейс. Класът ArrayList създава списъка, който се съхранява вътре в a динамичен масив който нараства или се свива по размер, когато елементите се добавят или изтриват от него. LinkedList също създава списъка, който се съхранява вътре в a двойно свързан списък, И двата класа се използват за съхраняване на елементите в списъка, но основната разлика между класовете 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 както и Queue, тъй като изпълнява List и Queue и двете.


Дефиниция на ArrayList

Най- AbstractList клас се дефинира от Рамка за събиране, Той се простира AbstarctList и инструменти списък интерфейс. ArrayList използва динамичен масив т.е. масив с променлива дължина като вътрешна структура на данни за съхраняване на елементите в списъка. Необходимостта от ArrayList възниква, тъй като масивът в Java е с фиксирана дължина. Така че не може да нарасне или да се свие по размер, тъй като елементите се добавят или изтриват от масива. Така че трябва да знаете размера на необходимия масив предварително. Но списъкът на масиви, реализиран с клас ArrayList, може да расте и да се свива по размер, докато елементите се добавят или изтриват от масива.

Списъкът с масиви, реализирани с помощта на ArrayList, може да бъде достъпен произволно тъй като ArrayList работи на базата на индексите. Така че като знаете индекса, можете директно да получите достъп до елемента на списъка. Има три конструктора на ArrayList:

ArrayList () ArrayList (Колекция <? Разширява E> c) ArrayList (int капацитет)

Най- първи конструктор реализира списък с празни масиви. Най- втори конструктор реализира списък с масиви, инициализиран с помощта на Колекция c елементи. Най- трета конструктор реализира списък с масиви с капацитет предвидени в аргумента. Работейки с ArrayList, понякога ще ви е необходимо да преобразувате Collection ArrayList в масив. Може да стане чрез обаждане toArray ().

Дефиниция на LinkedList

Подобно на ArrayList, LinkedList също е a колекция клас използва двойно свързан списък като вътрешна структура на данни за съхраняване на елементите в списъка. Класът LinkedList се разширява AbstractSequentialList и изпълнява списък, Deque и Опашка интерфейси. Свързаният списък, реализиран с LinkedList, не може да бъде достъпен произволно. Ако искате да извлечете всеки елемент от списъка, трябва да повторите списъка, за да търсите в него.

Има два конструктора в клас LinkedList.

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

Най- първи конструктор създава празен свързан списък. Най- втори конструктор създава свързан списък, инициализиран с елементите на колекция ° С.

В LinkedList манипулирането на списъка е лесно и бързо. Това е така, защото ако добавите или изтриете всеки елемент от списъка, няма нужда от изместване на елементите, както в ArrayList. Но достъпът е по-бавен, тъй като няма индекс за директен достъп до елементите.

  1. Реализацията на списъка от ArrayList може да бъде достъпна произволно, защото ArrayList приема структурата на данните, базирана на индекс. От друга страна, списъкът, реализиран от LinkedList, не може да бъде достъпен произволно, тъй като за извличане или достъп до определен елемент от списъка трябва да преминете през него.
  2. Вътрешната структура на данни, използвана от ArrayList за съхраняване на елементите от списъка е a динамичен масив които могат да растат или да се свиват, когато елементите се добавят или изтрият от списъка. Въпреки това, вътрешната структура на данни, използвана от LinkedList за съхраняване на елементите в списъка е двойно свързан списък.
  3. ArrayList разширява AbstractList клас, който също е клас на колекция, докато класът LinkedList се разширява AbstractSequentialList клас, който отново е клас на колекция.
  4. ArrayList клас изпълнения списък интерфейс, докато класът LinkedList се изпълнява списък, Опашка, и Deque интерфейси.
  5. Достъпът до елементи от списъка, реализиран с помощта на ArrayList е по-бързо тъй като има структура, базирана на индекс. От друга страна, няма структура, базирана на индекс, в списъка, реализиран отLinkledList. Следователно над списъка се прилага итератор, за да достигне до елемента, до който се осъществява достъп, който прави достъп по-бавно в LinkedList.
  6. Манипулацията е манипулиране в списъка, реализиран с помощта на ArrayList, тъй като всеки път, когато елемент се добави или изтрие от списъка, елементите в списъка се изместват, за да се приспособи промяната. От друга страна, манипулацията е по-бърза в списъка, реализиран от LinkedList, тъй като не изисква изместване на елементи в списъка при добавяне или изтриване на елементите от списъка.
  7. ArrayList действа като a списък тъй като той осъществява List интерфейс, докато LinkedList действа като списък и опашка тъй като изпълнява List и Queue и двете.

Заключение:

Когато има често добавяне или изтриване на елементите в списъка, LinkedList трябва да се използва, тъй като се постига по-добре по време на манипулация. Ако честото търсене се прилага към списъка, ArrayList е най-добрият избор, тъй като се представя по-добре при достъп до елементи от списъка.