logo

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]>

List-ArrayList-in-Java-In-Depth-Study

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);> >}> }>

java výber zoradiť
>

>

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

čo je predloženie adresára
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


triedenie výberu v jave



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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. 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ť.