Różnica między ArrayList i LinkedList w Javie

Autor: Laura McKinney
Data Utworzenia: 3 Kwiecień 2021
Data Aktualizacji: 5 Móc 2024
Anonim
Różnica między ArrayList i LinkedList w Javie - Technologia
Różnica między ArrayList i LinkedList w Javie - Technologia

Zawartość


ArrayList i LinkedList to Kolekcja klasy i obie implementują Lista berło. Klasa ArrayList tworzy listę, która jest wewnętrznie przechowywana w pliku dynamiczny szyk które rośnie lub maleje wraz z dodawaniem lub usuwaniem elementów. LinkedList tworzy również listę, która jest wewnętrznie przechowywana w pliku Podwójnie Połączony Lista. Obie klasy są używane do przechowywania elementów na liście, ale główna różnica między klasami ArrayList i LinkedList polega na tym, że ArrayList umożliwia losowy dostęp do elementów na liście, ponieważ działa on na na podstawie indeksu struktura danych. Z drugiej strony Połączona lista nie zezwala na losowy dostęp, ponieważ nie ma indeksów umożliwiających bezpośredni dostęp do elementów, musi przejść przez listę, aby pobrać lub uzyskać dostęp do elementu z listy.


Omówmy jeszcze kilka różnic między ArrayList i LinkedList za pomocą tabeli porównawczej pokazanej poniżej.

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania

Podstawa do porównaniaArrayListPołączona lista
Podstawowy ArrayList umożliwia losowy dostęp do elementów na liście.LinkedList nie pozwala na losowy dostęp do elementów na liście.
Struktura danychWewnętrzna struktura używana do przechowywania elementów to tablica dynamiczna.Wewnętrzna struktura używana do przechowywania elementów to podwójnie lista linków.
Rozciąga sięArrayList rozszerza klasę AbstarctList.LinkedList rozszerza AbstractSequentialList.
NarzędziaAbstractList implementuje interfejs listy.LinkedList implementuje List, Deque, Queue.
Dostęp Dostęp do elementów na liście jest szybszy w ArrayList.Dostęp do elementów na liście jest wolniejszy w LinkedList.
ManipulacjaManipulowanie elementami na liście jest wolniejsze w ArrayList.Manipulowanie elementami na liście jest szybsze w LinkedList.
ZachowanieArraylList zachowuje się jak List, ponieważ implementuje listę.LinkedList zachowuje się jak Lista oraz kolejka, ponieważ implementuje zarówno List, jak i Kolejkę.


Definicja ArrayList

The AbstractList klasa jest zdefiniowana przez Framework kolekcji. Rozciąga się AbstarctList i wdraża Lista berło. Używa ArrayList tablica dynamiczna tj. tablica o zmiennej długości jako wewnętrzna struktura danych do przechowywania elementów na liście. Potrzeba ArrayList powstaje, ponieważ tablica w Javie ma stałą długość. Nie może więc powiększać ani zmniejszać się w miarę dodawania lub usuwania elementów z tablicy. Musisz więc wcześniej poznać rozmiar wymaganej tablicy. Ale lista tablic zaimplementowana przy użyciu klasy ArrayList może się powiększać i zmniejszać w miarę dodawania lub usuwania elementów z tablicy.

Dostęp do listy tablic zaimplementowanej za pomocą ArrayList losowo ponieważ ArrayList działa na podstawie indeksu. Dzięki znajomości indeksu możesz uzyskać bezpośredni dostęp do elementu listy. Istnieją trzy konstruktory ArrayList:

ArrayList () ArrayList (kolekcja <? Rozszerza E> c) ArrayList (pojemność int)

The pierwszy konstruktor implementuje pustą listę tablic. The druga konstruktor implementuje listę tablic zainicjowaną za pomocą Kolekcja c elementy. The trzeci konstruktor implementuje listę tablic przy pomocy Pojemność podany w argumencie. Podczas pracy z ArrayList czasami trzeba będzie przekonwertować Collection ArrayList na tablicę. Można to zrobić dzwoniąc toArray ().

Definicja LinkedList

Jak ArrayList, Połączona lista jest również Kolekcja zastosowania klasy podwójnie połączona lista jako wewnętrzna struktura danych do przechowywania elementów na liście. Rozszerzona jest klasa LinkedList AbstractSequentialList i wdraża Lista, Deque i Kolejka interfejsy. Nie można losowo uzyskać dostępu do listy połączonej zaimplementowanej za pomocą LinkedList. Jeśli chcesz pobrać dowolny element z listy, musisz iterować listę, aby wyszukać ten element.

Istnieją dwa konstruktory w klasie LinkedList.

LinkedList () LinkedList (kolekcja <? Rozszerza E> c)

The pierwszy Konstruktor tworzy pustą listę połączoną. The druga konstruktor tworzy listę połączoną, zainicjowaną za pomocą elementów Kolekcja do.

W LinkedList manipulowanie listą jest łatwe i szybkie. Wynika to z faktu, że jeśli dodasz lub usuniesz dowolny element na liście, nie ma potrzeby przesuwania elementów jak w ArrayList. Ale dostęp jest wolniejszy, ponieważ nie ma indeksu umożliwiającego bezpośredni dostęp do elementów.

  1. Dostęp do listy zaimplementowanej przez ArrayList można uzyskać losowo, ponieważ ArrayList przyjmuje opartą na indeksie strukturę danych tablicy. Z drugiej strony, lista zaimplementowana przez LinkedList nie może być dostępna losowo, ponieważ aby pobrać lub uzyskać dostęp do określonego elementu na liście, należy przejść przez listę.
  2. Wewnętrzna struktura danych używana przez ArrayList do przechowywania elementów listy to tablica dynamiczna które mogą rosnąć lub kurczyć się w miarę dodawania lub usuwania elementów z listy. Jednak wewnętrzna struktura danych używana przez LinkedList do przechowywania elementów na liście to podwójnie połączona lista.
  3. ArrayList rozszerza AbstractList klasa, która jest również klasą Collection, natomiast klasa LinkedList jest rozszerzana AbstractSequentialList klasa, która ponownie jest klasą Collection.
  4. Implementuje klasę ArrayList Lista interfejs natomiast klasa LinkedList implementuje Lista, Kolejka, i Deque interfejsy.
  5. Dostęp do elementów z listy zaimplementowanej za pomocą ArrayList jest szybciej ponieważ ma strukturę danych opartą na indeksie. Z drugiej strony nie ma struktury opartej na indeksie w implementacji listy przezLinkledList. Dlatego iterator jest nakładany na listę, aby dotrzeć do elementu, który ma być dostępny, który umożliwia dostęp wolniej w LinkedList.
  6. Manipulacja to Manipulacja na liście zaimplementowanej przy użyciu ArrayList, ponieważ za każdym razem, gdy element jest dodawany lub usuwany z listy, elementy na liście są przesuwane, aby uwzględnić zmianę. Z drugiej strony manipulacja jest szybsza na liście zaimplementowanej przez LinkedList, ponieważ nie wymaga przesuwania elementów na liście po dodaniu lub usunięciu elementów z listy.
  7. ArrayList działa jak lista ponieważ implementuje interfejs List, zaś LinkedList działa jako lista i kolejka ponieważ implementuje zarówno List, jak i Kolejkę.

Wniosek:

W przypadku częstego dodawania lub usuwania elementów na liście należy użyć LinkedList, ponieważ działa on lepiej podczas manipulacji. Jeśli do listy stosowane jest częste wyszukiwanie, ArrayList jest najlepszym wyborem, ponieważ działa lepiej podczas uzyskiwania dostępu do elementów z listy.