logo

LinkedList v Javě

Linked List je součástí Kolektivní rámec přítomný v balíčku java.util . Tato třída je implementací dvojitě propojené datové struktury seznamu.

Hlavní rozdíl mezi normálním propojeným seznamem a dvojitě propojeným seznamem je ten, že dvojitě propojený seznam obsahuje další ukazatel, který se obvykle nazývá předchozí ukazatel, spolu s dalším ukazatelem a daty, která jsou v jednoduše propojeném seznamu.

Konstruktoři v LinkedList:

Abychom mohli vytvořit LinkedList, musíme vytvořit objekt třídy LinkedList. Třída LinkedList se skládá z různých konstruktorů, které umožňují případné vytvoření seznamu. V této třídě jsou k dispozici následující konstruktory:



1. Spojový seznam(): Tento konstruktor se používá k vytvoření prázdného propojeného seznamu. Pokud chceme vytvořit prázdný LinkedList s názvem ll, lze jej vytvořit jako:

LinkedList ll = new LinkedList();

2. LinkedList (kolekce C): Tento konstruktor se používá k vytvoření uspořádaného seznamu, který obsahuje všechny prvky zadané kolekce, jak je vrací iterátor kolekce. Pokud chceme vytvořit LinkedList s názvem ll, pak může být vytvořen jako:

LinkedList ll = new LinkedList(C);

Metody pro Java LinkedList:

Metoda Popis
add(int index, prvek E) Tato metoda Vloží zadaný prvek na zadané místo v tomto seznamu.
přidat (a a) Tato metoda Připojí zadaný prvek na konec tohoto seznamu.
addAll(int index, kolekce c) Tato metoda Vloží všechny prvky v zadané kolekci do tohoto seznamu počínaje zadanou pozicí.
addAll(kolekce c) Tato metoda připojí všechny prvky v zadané kolekci na konec tohoto seznamu v pořadí, v jakém jsou vráceny iterátorem zadané kolekce.
addFirst (E e) Tato metoda Vloží zadaný prvek na začátek tohoto seznamu.
addLast(E e) Tato metoda Připojí zadaný prvek na konec tohoto seznamu.
Průhledná() Tato metoda odstraní všechny prvky z tohoto seznamu.
klon() Tato metoda vrací mělkou kopii tohoto LinkedList.
obsahuje (Objekt o) Tato metoda vrátí hodnotu true, pokud tento seznam obsahuje zadaný prvek.
descendingIterator() Tato metoda vrací iterátor nad prvky v tomto deque v obráceném pořadí.
živel() Tato metoda načte, ale neodstraní hlavičku (první prvek) tohoto seznamu.
get(int index) Tato metoda vrátí prvek na zadanou pozici v tomto seznamu.
getFirst() Tato metoda vrátí první prvek v tomto seznamu.
getLast() Tato metoda vrací poslední prvek v tomto seznamu.
indexOf(Objekt o) Tato metoda vrátí index prvního výskytu zadaného prvku v tomto seznamu nebo -1, pokud tento seznam prvek neobsahuje.
lastIndexOf(Objekt o) Tato metoda vrací index posledního výskytu zadaného prvku v tomto seznamu nebo -1, pokud tento seznam prvek neobsahuje.
listIterator(int index) Tato metoda vrací iterátor seznamu prvků v tomto seznamu (ve správném pořadí), počínaje od zadané pozice v seznamu.
nabídka (E e) Tato metoda Přidá zadaný prvek jako konec (poslední prvek) tohoto seznamu.
nabídka první (E a) Tato metoda Vloží určený prvek na začátek tohoto seznamu.
poslední nabídka (E e) Tato metoda Vloží zadaný prvek na konec tohoto seznamu.
nahlédnout () Tato metoda načte, ale neodstraní hlavičku (první prvek) tohoto seznamu.
peekFirst() Tato metoda načte, ale neodstraní první prvek tohoto seznamu, nebo vrátí hodnotu null, pokud je tento seznam prázdný.
peekLast() Tato metoda načte, ale neodstraní poslední prvek tohoto seznamu, nebo vrátí hodnotu null, pokud je tento seznam prázdný.
hlasování() Tato metoda načte a odstraní hlavičku (první prvek) tohoto seznamu.
pollFirst() Tato metoda načte a odstraní první prvek tohoto seznamu nebo vrátí hodnotu null, pokud je tento seznam prázdný.
pollLast() Tato metoda načte a odstraní poslední prvek tohoto seznamu nebo vrátí hodnotu null, pokud je tento seznam prázdný.
pop() Tato metoda Vybere prvek ze zásobníku reprezentovaného tímto seznamem.
tlačit (E a) Tato metoda vloží prvek do zásobníku reprezentovaného tímto seznamem.
odstranit() Tato metoda načte a odstraní hlavičku (první prvek) tohoto seznamu.
odstranit (int index) Tato metoda odstraní prvek na zadané pozici v tomto seznamu.
odstranit (objekt o) Tato metoda odstraní první výskyt zadaného prvku z tohoto seznamu, pokud je přítomen.
removeFirst() Tato metoda odstraní a vrátí první prvek z tohoto seznamu.
removeFirstOccurrence(Object o) Tato metoda odstraní první výskyt zadaného prvku v tomto seznamu (při procházení seznamu od hlavy k patě).
removeLast() Tato metoda odstraní a vrátí poslední prvek z tohoto seznamu.
removeLastOccurrence(Object o) Tato metoda odstraní poslední výskyt zadaného prvku v tomto seznamu (při procházení seznamu od hlavy k patě).
set(int index, prvek E) Tato metoda nahradí prvek na zadané pozici v tomto seznamu zadaným prvkem.
velikost() Tato metoda vrací počet prvků v tomto seznamu.
rozdělovač() Tato metoda vytvoří nad prvky v tomto seznamu spliterator s pozdní vazbou a rychlým selháním.
toArray() Tato metoda vrací pole obsahující všechny prvky v tomto seznamu ve správném pořadí (od prvního po poslední prvek).
toArray(T[] a) Tato metoda vrací pole obsahující všechny prvky v tomto seznamu ve správném pořadí (od prvního po poslední prvek); typ runtime vráceného pole je typ zadaného pole.
toString() Tato metoda vrací řetězec obsahující všechny prvky v tomto seznamu ve správném pořadí (od prvního po poslední prvek), každý prvek je oddělen čárkami a řetězec je uzavřen v hranatých závorkách.

Níže je uvedena implementace výše uvedených operací:

Jáva




// 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ýstup

[D, A, E, B, C] [A]>

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

Na obrázku výše jsou AbstractList , CopyOnWriteArrayList a AbstractSequentialList třídy, které implementují rozhraní seznamu. V každé ze zmíněných tříd je implementována samostatná funkcionalita. Oni jsou:

    AbstractList: Tato třída se používá k implementaci nemodifikovatelného seznamu, pro který je potřeba pouze rozšířit tuto třídu AbstractList a implementovat pouze metody get() a size(). CopyOnWriteArrayList: Tato třída implementuje rozhraní seznamu. Je to vylepšená verze ArrayList, ve které jsou všechny úpravy (přidat, nastavit, odebrat atd.) implementovány vytvořením nové kopie seznamu.

Provádění různých operací na LinkedList:

  • Přidávání prvků
  • Aktualizace prvků
  • Odstraňování prvků
  • Iterování přes prvky
  • To Array();
  • Velikost();
  • remove First();
  • remove last();

Operace 1: Přidávání prvků

Abychom přidali prvek do ArrayList, můžeme použít metodu add() . Tato metoda je přetížena prováděním více operací na základě různých parametrů. Oni jsou:

    add(Object): Tato metoda se používá k přidání prvku na konec LinkedList. add(int index, Object): Tato metoda se používá k přidání prvku do určitého indexu v LinkedList.

Níže je uvedena implementace výše uvedené operace:

Jáva




// 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ýstup

[Geeks, For, Geeks]>

Operace 2: Změna prvků

Po přidání prvků, pokud chceme prvek změnit, lze to provést pomocí metody set() . Protože LinkedList je indexován, na prvek, který chceme změnit, se odkazuje index prvku. Proto tato metoda bere index a aktualizovaný prvek, který je třeba vložit do tohoto indexu.

Níže je uvedena implementace výše uvedené operace:

Jáva




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

hašování v datové struktuře
>

>

Výstup

Initial LinkedList [Geeks, Geeks, Geeks] Updated LinkedList [Geeks, For, Geeks]>

Operace 3: Odebírání prvků

Abychom odstranili prvek z LinkedList, můžeme použít metodu remove() . Tato metoda je přetížena prováděním více operací na základě různých parametrů. Oni jsou:

    remove(Object): Tato metoda se používá k jednoduchému odstranění objektu z LinkedList. Pokud existuje více takových objektů, pak se první výskyt objektu odstraní. remove(int index): Protože je LinkedList indexován, tato metoda přebírá celočíselnou hodnotu, která jednoduše odstraní prvek přítomný na tomto konkrétním indexu v LinkedList. Po odstranění prvku a indexů prvků se aktualizuje, stejně jako se aktualizuje objekt LinkedList a po smazání prvku/ů se získá nový seznam.

Níže je uvedena implementace výše uvedené operace:

Jáva




// 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ýstup

Initial LinkedList [Geeks, For, Geeks] After the Index Removal [Geeks, Geeks] After the Object Removal [Geeks]>

Operace 4: Iterace LinkedList

Existuje několik způsobů, jak iterovat přes LinkedList. Nejznámějšími způsoby je použití základní smyčky for v kombinaci s metodou get() k získání prvku na konkrétním indexu a pokročilé smyčky for.

Níže je uvedena implementace výše uvedené operace:

Jáva




// 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ýstup

Geeks For Geeks Geeks For Geeks>

Operace 4: Propojený seznam s To Array pomocí toArray();

Jáva




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

>

porovnání řetězců v Javě
>

Výstup

LinkedList: [123, 12, 11, 1134] After converted LinkedList to Array: 123 12 11 1134>

Operace 5-size();

Jáva




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ýstup

The size of the linked list is: 2>

Operace 7 – removeFirst();

Jáva




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ýstup

LinkedList:[10, 20, 30] The remove first element is: 10 Final LinkedList:[20, 30]>

Operace 8- removelast();

Jáva




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ýstup

LinkedList:[10, 20, 30] The last element is removed: 30 Final LinkedList:[10, 20] The last element is removed: 20 Final LinkedList:[10]>

Třída LinkedList v Javě je součástí Java Collections Framework a poskytuje implementaci propojeného seznamu rozhraní List. Umožňuje ukládání a načítání prvků ve dvojitě propojené datové struktuře seznamu, kde je každý prvek propojen se svými předchůdci a následovníky.

Zde je jednoduchý příklad, který ukazuje, jak používat LinkedList v Javě:

Jáva

runas v powershell




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ýstup

0 1 2 3 4>

Výhody použití LinkedList v Javě:

  1. Dynamická velikost: Stejně jako u Vector může velikost LinkedList dynamicky růst nebo zmenšovat, takže se nemusíte starat o nastavení počáteční velikosti.
  2. Efektivní vkládání a mazání: LinkedList je efektivní datová struktura pro vkládání nebo mazání prvků uprostřed seznamu, protože potřebujete pouze změnit vazby mezi prvky, nikoli posouvat všechny prvky za bod vložení nebo odstranění.
  3. Flexibilní iterace: S propojeným seznamem můžete efektivně iterovat seznamem v obou směrech, protože každý prvek má odkaz na své předchůdce i následovníky.

Nevýhody používání LinkedList v Javě:

  1. Výkon: LinkedList má pomalejší výkon než ArrayList, pokud jde o přístup k jednotlivým prvkům. Je to proto, že musíte procházet seznamem, abyste dosáhli požadovaného prvku, zatímco s ArrayList můžete jednoduše přistupovat k požadovanému prvku pomocí indexu.
  2. Režie paměti: LinkedList vyžaduje více paměti než ArrayList, protože každý prvek vyžaduje dodatečnou paměť pro odkazy na jeho předchůdce a následovníky.

Příručka:

Dobrou referenční knihou pro seznámení se s Java Collections Framework a LinkedList je Java Collections od Naftalin a Wadler. Tato kniha poskytuje komplexní pohled na rámec kolekcí Java, včetně LinkedList, a obsahuje mnoho příkladů a cvičení, která vám pomohou pochopit, jak tyto třídy efektivně používat.