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