logo

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

ArrayList и LinkedList изпълняват интерфейса List и поддържат реда на вмъкване. И двата са несинхронизирани класове.

преобразуване на булево в низ

Въпреки това има много разлики между класовете ArrayList и LinkedList, които са дадени по-долу.

ArrayListLinkedList
1) ArrayList вътрешно използва a динамичен масив за съхраняване на елементите.LinkedList вътрешно използва a двойно свързан списък за съхраняване на елементите.
2) Манипулацията с ArrayList е бавен тъй като вътрешно използва масив. Ако някой елемент бъде премахнат от масива, всички останали елементи се изместват в паметта.Манипулацията с LinkedList е по-бързо отколкото ArrayList, защото използва двойно свързан списък, така че не е необходимо преместване на битове в паметта.
3) Клас ArrayList може действа като списък само защото прилага само списък.Класът LinkedList може действа като списък и опашка и двете, защото имплементира List и Deque интерфейси.
4) ArrayList е по-добре за съхранение и достъп данни.LinkedList е по-добре за манипулиране данни.
5) Местоположението на паметта за елементите на ArrayList е непрекъснато.Местоположението на елементите на свързания списък не е заразно.
6) Обикновено, когато се инициализира ArrayList, на 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.