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 tablic | Połą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.