LinkedList v jazyku Java
Prepojený zoznam je súčasťou Kolekčný rámec prítomný v balíku java.util . Táto trieda je implementáciou dvojnásobne prepojenej dátovej štruktúry zoznamu.
Hlavný rozdiel medzi normálnym prepojeným zoznamom a dvojitým prepojeným zoznamom je v tom, že dvojito prepojený zoznam obsahuje ďalší ukazovateľ, ktorý sa zvyčajne nazýva predchádzajúci ukazovateľ, spolu s nasledujúcim ukazovateľom a údajmi, ktoré sa nachádzajú v jednoducho prepojenom zozname.
Konštruktory v LinkedList:
Aby sme mohli vytvoriť LinkedList, musíme vytvoriť objekt triedy LinkedList. Trieda LinkedList pozostáva z rôznych konštruktorov, ktoré umožňujú prípadné vytvorenie zoznamu. V tejto triede sú dostupné nasledujúce konštruktory:
1. LinkedList(): Tento konštruktor sa používa na vytvorenie prázdneho prepojeného zoznamu. Ak chceme vytvoriť prázdny LinkedList s názvom ll, môžeme ho vytvoriť ako:
LinkedList ll = new LinkedList();
2. LinkedList (Kolekcia C): Tento konštruktor sa používa na vytvorenie usporiadaného zoznamu, ktorý obsahuje všetky prvky zadanej kolekcie, ako ich vracia iterátor kolekcie. Ak chceme vytvoriť LinkedList s názvom ll, môžeme ho vytvoriť ako:
LinkedList ll = new LinkedList(C);
Metódy pre Java LinkedList:
| Metóda | Popis |
|---|---|
| pridať (index int, prvok E) | Táto metóda Vloží zadaný prvok na určené miesto v tomto zozname. |
| pridať (a a) | Táto metóda Pripojí špecifikovaný prvok na koniec tohto zoznamu. |
| addAll(int index, kolekcia c) | Táto metóda Vloží všetky prvky v zadanej kolekcii do tohto zoznamu, počnúc od zadanej pozície. |
| addAll(Kolekcia c) | Táto metóda pripojí všetky prvky v zadanej kolekcii na koniec tohto zoznamu v poradí, v akom ich vráti iterátor zadanej kolekcie. |
| addFirst(E e) | Táto metóda Vloží zadaný prvok na začiatok tohto zoznamu. |
| addLast(E e) | Táto metóda Pripojí špecifikovaný prvok na koniec tohto zoznamu. |
| jasný() | Táto metóda odstráni všetky prvky z tohto zoznamu. |
| klon() | Táto metóda vráti plytkú kópiu tohto LinkedList. |
| obsahuje (Objekt o) | Táto metóda vráti hodnotu true, ak tento zoznam obsahuje zadaný prvok. |
| descendingIterator() | Táto metóda vracia iterátor nad prvkami v tomto deque v obrátenom poradí. |
| element() | Táto metóda načíta, ale neodstráni hlavičku (prvý prvok) tohto zoznamu. |
| získať (int index) | Táto metóda vráti prvok na zadanú pozíciu v tomto zozname. |
| getFirst() | Táto metóda vráti prvý prvok v tomto zozname. |
| getLast() | Táto metóda vráti posledný prvok v tomto zozname. |
| indexOf(Objekt o) | Táto metóda vráti index prvého výskytu zadaného prvku v tomto zozname alebo -1, ak tento zoznam prvok neobsahuje. |
| lastIndexOf(Object o) | Táto metóda vráti index posledného výskytu zadaného prvku v tomto zozname alebo -1, ak tento zoznam prvok neobsahuje. |
| listIterator(int index) | Táto metóda vráti zoznam-iterátor prvkov v tomto zozname (v správnom poradí), začínajúc na zadanej pozícii v zozname. |
| ponuka (E e) | Táto metóda Pridá zadaný prvok ako koniec (posledný prvok) tohto zoznamu. |
| ponuka prvá (E a) | Táto metóda Vloží špecifikovaný prvok na začiatok tohto zoznamu. |
| ponuka posledná (E e) | Táto metóda Vloží zadaný prvok na koniec tohto zoznamu. |
| nahliadnuť () | Táto metóda načíta, ale neodstráni hlavičku (prvý prvok) tohto zoznamu. |
| peekFirst() | Táto metóda načíta, ale neodstráni prvý prvok tohto zoznamu, alebo vráti hodnotu null, ak je tento zoznam prázdny. |
| peekLast() | Táto metóda načíta, ale neodstráni posledný prvok tohto zoznamu, alebo vráti hodnotu null, ak je tento zoznam prázdny. |
| anketa() | Táto metóda načíta a odstráni hlavičku (prvý prvok) tohto zoznamu. |
| pollFirst() | Táto metóda načíta a odstráni prvý prvok tohto zoznamu alebo vráti hodnotu null, ak je tento zoznam prázdny. |
| pollLast() | Táto metóda načíta a odstráni posledný prvok tohto zoznamu alebo vráti hodnotu null, ak je tento zoznam prázdny. |
| pop() | Táto metóda Vyberie prvok zo zásobníka reprezentovaného týmto zoznamom. |
| tlačiť (E a) | Táto metóda vloží prvok do zásobníka reprezentovaného týmto zoznamom. |
| odstrániť () | Táto metóda načíta a odstráni hlavičku (prvý prvok) tohto zoznamu. |
| odstrániť (int index) | Táto metóda odstráni prvok na zadanej pozícii v tomto zozname. |
| odstrániť (Objekt o) | Táto metóda odstráni prvý výskyt zadaného prvku z tohto zoznamu, ak je prítomný. |
| removeFirst() | Táto metóda odstráni a vráti prvý prvok z tohto zoznamu. |
| removeFirstOccurrence(Object o) | Táto metóda odstráni prvý výskyt zadaného prvku v tomto zozname (pri prechádzaní zoznamom od hlavy po koniec). |
| removeLast() | Táto metóda odstráni a vráti posledný prvok z tohto zoznamu. |
| removeLastOccurrence(Object o) | Táto metóda odstráni posledný výskyt zadaného prvku v tomto zozname (pri prechádzaní zoznamom od hlavy po koniec). |
| set(int index, prvok E) | Táto metóda nahradí prvok na zadanej pozícii v tomto zozname zadaným prvkom. |
| veľkosť () | Táto metóda vráti počet prvkov v tomto zozname. |
| rozdeľovač() | Táto metóda vytvorí nad prvkami v tomto zozname spliterator s oneskorenou väzbou a rýchlym zlyhaním. |
| toArray() | Táto metóda vráti pole obsahujúce všetky prvky v tomto zozname v správnom poradí (od prvého po posledný prvok). |
| toArray(T[] a) | Táto metóda vráti pole obsahujúce všetky prvky v tomto zozname v správnom poradí (od prvého po posledný prvok); typ runtime vráteného poľa je typ zadaného poľa. |
| natiahnuť() | Táto metóda vráti reťazec obsahujúci všetky prvky v tomto zozname v správnom poradí (od prvého po posledný prvok), každý prvok je oddelený čiarkami a reťazec je uzavretý v hranatých zátvorkách. |
Nižšie je uvedená implementácia vyššie uvedených operácií:
Java
// Java Program to Demonstrate> // Implementation of LinkedList> // class> > // Importing required classes> import> java.util.*;> > // Main class> public> class> GFG {> > > // Driver code> > public> static> void> main(String args[])> > {> > // Creating object of the> > // class linked list> > LinkedList ll => new> LinkedList();> > > // Adding elements to the linked list> > ll.add(> 'A'> );> > ll.add(> 'B'> );> > ll.addLast(> 'C'> );> > ll.addFirst(> 'D'> );> > ll.add(> 2> ,> 'E'> );> > > System.out.println(ll);> > > ll.remove(> 'B'> );> > ll.remove(> 3> );> > ll.removeFirst();> > ll.removeLast();> > > System.out.println(ll);> > }> }> |
Výkon
[D, A, E, B, C] [A]
Na obrázku vyššie sú AbstractList , CopyOnWriteArrayList a AbstractSequentialList triedy, ktoré implementujú rozhranie zoznamu. V každej zo spomínaných tried je implementovaná samostatná funkcionalita. Oni sú:
- AbstractList: Táto trieda sa používa na implementáciu nemodifikovateľného zoznamu, pre ktorý stačí rozšíriť túto triedu AbstractList a implementovať iba metódy get() a size(). CopyOnWriteArrayList: Táto trieda implementuje rozhranie zoznamu. Je to vylepšená verzia ArrayList, v ktorej sú všetky úpravy (pridanie, nastavenie, odstránenie atď.) implementované vytvorením novej kópie zoznamu.
Vykonávanie rôznych operácií na LinkedList:
- Pridávanie prvkov
- Aktualizácia prvkov
- Odstraňovanie prvkov
- Iterovanie cez prvky
- To Array();
- Veľkosť ();
- remove First();
- remove last();
Operácia 1: Pridávanie prvkov
Na pridanie prvku do ArrayList môžeme použiť metódu add() . Táto metóda je preťažená na vykonávanie viacerých operácií na základe rôznych parametrov. Oni sú:
- add(Object): Táto metóda sa používa na pridanie prvku na koniec LinkedList. add(int index, Object): Táto metóda sa používa na pridanie prvku do špecifického indexu v LinkedList.
Nižšie je uvedená implementácia vyššie uvedenej operácie:
Java
// Java program to add elements> // to a LinkedList> > import> java.util.*;> > public> class> GFG {> > > public> static> void> main(String args[])> > {> > LinkedList ll => new> LinkedList();> > > ll.add(> 'Geeks'> );> > ll.add(> 'Geeks'> );> > ll.add(> 1> ,> 'For'> );> > > System.out.println(ll);> > }> }> |
Výkon
[Geeks, For, Geeks]
Operácia 2: Zmena prvkov
Po pridaní prvkov, ak chceme prvok zmeniť, môžeme to urobiť pomocou metódy set() . Keďže LinkedList je indexovaný, na prvok, ktorý chceme zmeniť, odkazuje index prvku. Preto táto metóda berie index a aktualizovaný prvok, ktorý je potrebné vložiť do tohto indexu.
Nižšie je uvedená implementácia vyššie uvedenej operácie:
Java
// Java program to change elements> // in a LinkedList> > import> java.util.*;> > public> class> GFG {> > > public> static> void> main(String args[])> > {> > LinkedList ll => new> LinkedList();> > > ll.add(> 'Geeks'> );> > ll.add(> 'Geeks'> );> > ll.add(> 1> ,> 'Geeks'> );> > > System.out.println(> 'Initial LinkedList '> + ll);> > > ll.set(> 1> ,> 'For'> );> > > System.out.println(> 'Updated LinkedList '> + ll);> > }> }> |
Výkon
Initial LinkedList [Geeks, Geeks, Geeks] Updated LinkedList [Geeks, For, Geeks]
Operácia 3: Odstraňovanie prvkov
Na odstránenie prvku z LinkedList môžeme použiť metódu remove() . Táto metóda je preťažená na vykonávanie viacerých operácií na základe rôznych parametrov. Oni sú:
- remove(Object): Táto metóda sa používa na jednoduché odstránenie objektu z LinkedList. Ak existuje viacero takýchto objektov, potom sa prvý výskyt objektu odstráni. remove(int index): Keďže LinkedList je indexovaný, táto metóda nadobudne celočíselnú hodnotu, ktorá jednoducho odstráni prvok prítomný na tomto konkrétnom indexe v LinkedList. Po odstránení prvku a indexy prvkov sa aktualizujú, tak sa aktualizuje aj objekt LinkedList a po vymazaní prvku (prvkov) sa získa nový zoznam.
Nižšie je uvedená implementácia vyššie uvedenej operácie:
Java
// Java program to remove elements> // in a LinkedList> > import> java.util.*;> > public> class> GFG {> > > public> static> void> main(String args[])> > {> > LinkedList ll => new> LinkedList();> > > ll.add(> 'Geeks'> );> > ll.add(> 'Geeks'> );> > ll.add(> 1> ,> 'For'> );> > > System.out.println(> 'Initial LinkedList '> + ll);> > > // Function call> > ll.remove(> 1> );> > > System.out.println(> 'After the Index Removal '> + ll);> > > ll.remove(> 'Geeks'> );> > > System.out.println(> 'After the Object Removal '> > + ll);> > }> }> |
Výkon
Initial LinkedList [Geeks, For, Geeks] After the Index Removal [Geeks, Geeks] After the Object Removal [Geeks]
Operácia 4: Iterácia LinkedList
Existuje niekoľko spôsobov, ako iterovať cez LinkedList. Najznámejšími spôsobmi je použitie základnej slučky for v kombinácii s metódou get() na získanie prvku na konkrétnom indexe a pokročilej slučky for.
Nižšie je uvedená implementácia vyššie uvedenej operácie:
Java
// Java program to iterate the elements> // in an LinkedList> > import> java.util.*;> > public> class> GFG {> > > public> static> void> main(String args[])> > {> > LinkedList ll> > => new> LinkedList();> > > ll.add(> 'Geeks'> );> > ll.add(> 'Geeks'> );> > ll.add(> 1> ,> 'For'> );> > > // Using the Get method and the> > // for loop> > for> (> int> i => 0> ; i System.out.print(ll.get(i) + ' '); } System.out.println(); // Using the for each loop for (String str : ll) System.out.print(str + ' '); } }> |
Výkon
Geeks For Geeks Geeks For Geeks
Operácia 4: Prepojený zoznam s To Array pomocou toArray();
Java
import> java.util.*;> public> class> GFG2 {> > public> static> void> main(String[] args)> > {> > LinkedList list=> new> LinkedList();> > list.add(> 123> );> > list.add(> 12> );> > list.add(> 11> );> > list.add(> 1134> );> > System.out.println(> 'LinkedList: '> + list);> > Object[] a = list.toArray();> > System.out.print(> 'After converted LinkedList to Array: '> );> > for> (Object element : a)> > System.out.print(element+> ' '> );> > }> }> |
Výkon
LinkedList: [123, 12, 11, 1134] After converted LinkedList to Array: 123 12 11 1134
Operácia 5-size();
Java
import> java.io.*;> import> java.util.LinkedList;> public> class> GFG2 {> > public> static> void> main(String args[]) {> > LinkedList list => new> LinkedList();> > list.add(> 'Geeks for Geeks '> );> > list.add(> 'is best '> );> > // Displaying the size of the list> > System.out.println(> 'The size of the linked list is: '> + list.size());> > }> }> |
Výkon
The size of the linked list is: 2
Operácia 7 – removeFirst();
Java
import> java.io.*;> import> java.util.LinkedList;> public> class> GFG2 {> > public> static> void> main(String args[]) {> > > LinkedList list => new> LinkedList();> > list.add(> 10> );> > list.add(> 20> );> > list.add(> 30> );> > System.out.println(> 'LinkedList:'> + list);> > System.out.println(> 'The remove first element is: '> + list.removeFirst());> > // Displaying the final list> > System.out.println(> 'Final LinkedList:'> + list);> > }> }> |
Výkon
LinkedList:[10, 20, 30] The remove first element is: 10 Final LinkedList:[20, 30]
Operácia 8- removelast();
Java
import> java.io.*;> import> java.util.LinkedList;> public> class> GFG2 {> > public> static> void> main(String args[])> > {> > > LinkedList list => new> LinkedList();> > list.add(> 10> );> > list.add(> 20> );> > list.add(> 30> );> > System.out.println(> 'LinkedList:'> + list);> > // Remove the tail using removeLast()> > System.out.println(> 'The last element is removed: '> + list.removeLast());> > // Displaying the final list> > System.out.println(> 'Final LinkedList:'> + list);> > // Remove the tail using removeLast()> > System.out.println(> 'The last element is removed: '> + list.removeLast());> > // Displaying the final list> > System.out.println(> 'Final LinkedList:'> + list);> > }> }> |
Výkon
LinkedList:[10, 20, 30] The last element is removed: 30 Final LinkedList:[10, 20] The last element is removed: 20 Final LinkedList:[10]
Trieda LinkedList v jazyku Java je súčasťou Java Collections Framework a poskytuje implementáciu prepojeného zoznamu rozhrania List. Umožňuje ukladanie a získavanie prvkov v dvojito prepojenej dátovej štruktúre zoznamu, kde je každý prvok prepojený so svojimi predchodcami a následnými prvkami.
Tu je jednoduchý príklad, ktorý ukazuje, ako používať LinkedList v jazyku Java:
Java
import> java.util.LinkedList;> > public> class> LinkedListExample {> > public> static> void> main(String[] args) {> > // Create a new linked list> > LinkedList linkedList => new> LinkedList();> > > // Add elements to the linked list> > linkedList.add(> 1> );> > linkedList.add(> 2> );> > linkedList.add(> 3> );> > > // Add an element to the beginning of the linked list> > linkedList.addFirst(> 0> );> > > // Add an element to the end of the linked list> > linkedList.addLast(> 4> );> > > // Print the elements of the linked list> > for> (> int> i : linkedList) {> > System.out.println(i);> > }> > }> }> |
Výkon
0 1 2 3 4
Výhody používania LinkedList v jazyku Java:
- Dynamická veľkosť: Rovnako ako v prípade Vector, veľkosť LinkedList sa môže dynamicky zväčšovať alebo zmenšovať, takže sa nemusíte starať o nastavenie počiatočnej veľkosti.
- Efektívne vkladanie a odstraňovanie: LinkedList je efektívna dátová štruktúra na vkladanie alebo odstraňovanie prvkov v strede zoznamu, pretože potrebujete iba zmeniť prepojenia medzi prvkami, a nie presúvať všetky prvky za bod vloženia alebo vymazania.
- Flexibilná iterácia: S prepojeným zoznamom môžete efektívne iterovať zoznam v oboch smeroch, pretože každý prvok má odkaz na jeho predchodcu aj na nasledujúce prvky.
Nevýhody používania LinkedList v jazyku Java:
- Výkon: LinkedList má pomalší výkon ako ArrayList, pokiaľ ide o prístup k jednotlivým prvkom. Je to preto, že musíte prejsť zoznamom, aby ste sa dostali k požadovanému prvku, zatiaľ čo s ArrayList môžete jednoducho pristupovať k požadovanému prvku pomocou indexu.
- Pamäťová réžia: LinkedList vyžaduje viac pamäte ako ArrayList, pretože každý prvok vyžaduje dodatočnú pamäť pre odkazy na jeho predchodcu a následné prvky.
Príručka:
Dobrou referenčnou knihou na učenie sa o Java Collections Framework a LinkedList je Java Collections od Naftalin a Wadler. Táto kniha poskytuje komplexný pohľad na rámec kolekcií Java vrátane LinkedList a obsahuje mnoho príkladov a cvičení, ktoré vám pomôžu pochopiť, ako tieto triedy efektívne používať.