Vodič za Java LinkedList

1. Uvod

LinkedList je dvostruko povezana provedba popisa Popis i Deque sučelja. Provodi sve neobavezne operacije popisa i dopušta sve elemente (uključujući null).

2. Značajke

Ispod možete pronaći najvažnija svojstva LinkedList:

  • Operacije koje se indeksiraju na popisu prelazit će popis od početka ili do kraja, ovisno o tome što je bliže navedenom indeksu
  • Nije sinkronizirano
  • Njegova Iterator i ListIterator iteratori su neuspješni (što znači da nakon stvaranja iteratora, ako je popis izmijenjen, a ConcurrentModificationException bit će bačen)
  • Svaki je element čvor koji zadržava referencu na sljedeći i prethodni
  • Održava redoslijed umetanja

Iako LinkedList nije sinkroniziran, možemo doći do njegove sinkronizirane verzije pozivom na Zbirke.synchronizedList metoda, poput:

Popis popisa = Collections.synchronizedList (novi LinkedList (...));

3. Usporedba s ArrayList

Iako obojica provode Popis sučelje imaju različitu semantiku - što će definitivno utjecati na odluku koju će koristiti.

3.1. Struktura

An ArrayList je struktura podataka temeljena na indeksu potpomognuta Polje. Pruža slučajan pristup svojim elementima izvedbom jednakom O (1).

S druge strane, a LinkedList pohranjuje svoje podatke kao popis elemenata i svaki je element povezan sa svojim prethodnim i sljedećim elementom. U ovom slučaju, operacija pretraživanja stavke ima vrijeme izvršavanja jednako O (n).

3.2. Operacije

Operacije umetanja, dodavanja i uklanjanja predmeta brže su u a LinkedList jer nema potrebe za promjenom veličine niza ili ažuriranjem indeksa kada se element doda na neki proizvoljan položaj unutar zbirke, promijenit će se samo reference u okolnim elementima.

3.3. Korištenje memorije

A LinkedList troši više memorije od ArrayList zbog svakog čvora u a LinkedList pohranjuje dvije reference, jednu za prethodni element i drugu za sljedeći element, dok ArrayList sadrži samo podatke i njihov indeks.

4. Upotreba

Evo nekoliko primjera koda koji pokazuju kako možete koristiti LinkedList:

4.1. Stvaranje

LinkedList linkedList = novi LinkedList ();

4.2. Dodavanje elementa

LinkedList provodi Popis i Deque sučelje, osim standardnog dodati() i Dodaj Sve() metode koje možete pronaći addFirst () i addLast (), koji dodaje element na početku odnosno na kraju.

4.3. Uklanjanje elementa

Slično dodavanju elemenata koji nudi i ova implementacija popisa removeFirst () i removeLast ().

Također, postoji prikladna metoda removeFirstOccurence () i removeLastOccurence () koji vraća boolean (true ako je zbirka sadržavala navedeni element).

4.4. Operacije u redu

Deque sučelje pruža ponašanja slična redovima (zapravo Deque proteže se Red sučelje):

linkedList.poll (); linkedList.pop ();

Te metode dohvaćaju prvi element i uklanjaju ga s popisa.

Razlika između anketa() i pop () je li to pop bacit će NoSuchElementException () na praznom popisu, dok anketa vraća null. API-ji anketaPrvo () i pollLast () su također dostupni.

Evo na primjer kako gurnuti API radi:

linkedList.push (Objekt o);

Koji ubacuje element kao glavu zbirke.

LinkedList ima mnogo drugih metoda, od kojih bi većina trebala biti poznata korisniku koji se već koristio Popisi. Ostale koje pruža Deque može biti prikladna alternativa "standardnim" metodama.

Cjelovitu dokumentaciju možete pronaći ovdje.

5. Zaključak

ArrayList je obično zadana vrijednost Popis provedba.

Međutim, postoje određeni slučajevi upotrebe kada LinkedList će se bolje uklopiti, poput postavki za stalno vrijeme umetanja / brisanja (npr. česta umetanja / brisanja / ažuriranja), tijekom stalnog vremena pristupa i učinkovite upotrebe memorije.

Uzorci koda mogu se naći na GitHubu.