logo

Różnica między ArrayList i LinkedList

Zarówno ArrayList, jak i LinkedList implementują interfejs List i zachowują kolejność wstawiania. Obie są klasami niezsynchronizowanymi.

jaka kolekcja w Javie

Istnieje jednak wiele różnic pomiędzy klasami ArrayList i LinkedList, które podano poniżej.

Lista tablicPołączona lista
1) ArrayList wewnętrznie używa a tablica dynamiczna do przechowywania elementów.LinkedList wewnętrznie używa a podwójnie połączona lista do przechowywania elementów.
2) Manipulacja za pomocą ArrayList jest powolny ponieważ wewnętrznie używa tablicy. Jeśli jakikolwiek element zostanie usunięty z tablicy, wszystkie pozostałe elementy zostaną przesunięte w pamięci.Manipulacja za pomocą LinkedList jest szybciej niż ArrayList, ponieważ używa podwójnie połączonej listy, więc nie jest wymagane przesuwanie bitów w pamięci.
3) Klasa ArrayList może działać jak lista tylko dlatego, że implementuje tylko listę.Klasa LinkedList może działać jako lista i kolejka oba, ponieważ implementuje interfejsy List i Deque.
4) ArrayList to lepsze do przechowywania i dostępu dane.Połączona lista jest lepiej manipulować dane.
5) Lokalizacja pamięci dla elementów ArrayList jest ciągła.Lokalizacja elementów połączonej listy nie jest zaraźliwa.
6) Generalnie, kiedy inicjowana jest ArrayList, do ArrayList przypisana jest domyślna pojemność 10.W LinkedList nie ma przypadku domyślnej pojemności. W LinkedList pusta lista jest tworzona podczas inicjowania LinkedList.
7) Mówiąc ściślej, ArrayList jest tablicą o zmiennym rozmiarze.LinkedList implementuje podwójnie połączoną listę interfejsu listy.

Przykład ArrayList i LinkedList w Javie

Zobaczmy prosty przykład, w którym używamy zarówno ArrayList, jak i LinkedList.

Nazwa pliku: 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); } } 
Przetestuj teraz

Wyjście:

arraylist: [Ravi,Vijay,Ravi,Ajay] linkedlist: [James,Serena,Swati,Junaid] 

Punkty do zapamiętania

Poniżej przedstawiono kilka ważnych punktów, o których należy pamiętać w odniesieniu do ArrayList i LinkedList.

  • Jeśli tempo dodawania lub usuwania jest większe niż scenariusze odczytu, przejdź do LinkedList. Z drugiej strony, gdy częstotliwość scenariuszy odczytu jest większa niż współczynnik dodawania lub usuwania, wówczas ArrayList ma pierwszeństwo przed LinkedList.
  • Ponieważ elementy ArrayList są przechowywane w bardziej kompaktowy sposób w porównaniu do LinkedList; dlatego ArrayList jest bardziej przyjazny dla pamięci podręcznej w porównaniu do LinkedList. Zatem szanse na pominięcie pamięci podręcznej są mniejsze w ArrayList w porównaniu z LinkedList. Ogólnie uważa się, że LinkedList ma słabą lokalizację pamięci podręcznej.
  • Narzut pamięci w LinkedList jest większy w porównaniu do ArrayList. Dzieje się tak dlatego, że w LinkedList mamy dwa dodatkowe łącza (następny i poprzedni), ponieważ wymagane jest przechowywanie adresów poprzedniego i następnego węzła, a te łącza zajmują dodatkową przestrzeń. Takie linki nie są obecne w ArrayList.