Java LinkedList – LinkedList In Java

Java LinkedList is een implementatie van de List- en Deque-interfaces. Het is een van de vaak gebruikte implementatieklassen voor de List. Het breidt AbstractSequentialList uit en implementeert de List- en Deque-interfaces. Het is een geordende verzameling en ondersteunt duplicaatelementen. Het slaat elementen op in volgorde van invoeging. Het ondersteunt het toevoegen van nul-elementen. Het ondersteunt op index gebaseerde bewerkingen. Als je meer wilt weten over de basisprincipes van de List, bekijk dan deze post: Java List.

Post Inhoudsopgave

In deze post gaan we de volgende concepten bespreken.

  • Java LinkedList
  • Java LinkedList Klassen Diagram
  • Java LinkedList List Methoden
  • Java LinkedList Deque Methoden
  • Java LinkedList Basisvoorbeeld
  • Java LinkedList Generics
  • Java Array naar LinkedList
  • Java LinkedList naar Array
  • Java LinkedList Real-time Gebruiksscenario’s
  • Interne Representatie van Java LinkedList
  • Hoe werkt Invoeging in Java LinkedList?
  • Hoe werkt Verwijdering in Java LinkedList?
  • Java LinkedList Deque Bewerkingen
  • Java SE 8: Java LinkedList naar Stream
  • Java SE 9 LinkedList

Java LinkedList

In deze sectie zullen we enkele belangrijke punten bespreken over Java LinkedList:

  • De Java LinkedList-klasse is lid van het Java Collections Framework.
  • Het is een implementatie van de List- en Deque-interfaces.
  • Intern wordt het geïmplementeerd met behulp van de Doubly Linked List-datastructuur.
  • Het ondersteunt duplicaatelementen.
  • Het slaat zijn elementen op of behoudt ze in invoegvolgorde.
  • We kunnen elk aantal nulelementen toevoegen.
  • Het is niet gesynchroniseerd, wat betekent dat het niet thread-safe is.
  • We kunnen een gesynchroniseerde LinkedList maken met behulp van de methode Collections.synchronizedList().
  • In Java-toepassingen kunnen we het gebruiken als een lijst, stapel of wachtrij.
  • Het implementeert niet de RandomAccess-interface. Dus we kunnen alleen elementen in sequentiële volgorde benaderen. Het ondersteunt geen willekeurige toegang tot elementen.
  • Wanneer we proberen een element uit een LinkedList te benaderen, begint het zoeken van dat element vanaf het begin of het einde van de LinkedList, afhankelijk van waar dat element beschikbaar is.
  • We kunnen ListIterator gebruiken om LinkedList-elementen te doorlopen.
  • Vanaf Java SE 8 kunnen we een LinkedList converteren naar een Stream en vice versa.
  • Java SE 9 gaat een paar fabrieksmethoden toevoegen om een onveranderlijke LinkedList te maken.

Java LinkedList Klasse Diagram

Zoals we weten, is Java LinkedList een van de implementatieklassen van List. Het implementeert ook Deque. Zoals te zien is in het klassendiagram hieronder, breidt het niet rechtstreeks uit van de AbstractList-klasse. Het breidt de AbstractSequentialList-klasse uit.

Java LinkedList Lijst Methoden

In dit gedeelte zullen we enkele van de nuttige en veelgebruikte Java LinkedList-methoden bespreken. De volgende methoden worden geërfd van de List- of Collection-interface:

  1. int size(): om het aantal elementen in de lijst te krijgen.
  2. boolean isEmpty(): om te controleren of de lijst leeg is of niet.
  3. boolean contains(Object o): Geeft true terug als deze lijst het gespecificeerde element bevat.
  4. Iterator iterator(): Geeft een iterator terug over de elementen in deze lijst in de juiste volgorde.
  5. Object[] toArray(): Geeft een array terug die alle elementen in deze lijst bevat in de juiste volgorde.
  6. boolean add(E e): Voegt het gespecificeerde element toe aan het einde van deze lijst.
  7. boolean remove(Object o): Verwijdert de eerste voorkomen van het gespecificeerde element uit deze lijst.
  8. boolean retainAll(Collection c): Behoudt alleen de elementen in deze lijst die aanwezig zijn in de gespecificeerde verzameling.
  9. void clear(): Verwijdert alle elementen uit de lijst.
  10. E get(int index): Returns the element at the specified position in the list.
  11. E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
  12. ListIterator listIterator(): Geeft een lijstiterator terug over de elementen in de lijst.
  13. List subList(int fromIndex, int toIndex): Geeft een weergave van het gedeelte van deze lijst tussen het gespecificeerde fromIndex, inclusief, en toIndex, exclusief. De geretourneerde lijst wordt ondersteund door deze lijst, dus niet-structurele wijzigingen in de geretourneerde lijst worden weerspiegeld in deze lijst, en vice versa.

Java LinkedList Deque-methoden

De volgende methoden zijn specifiek voor de LinkedList-klasse en zijn overgeërfd van de Deque-interface:

  1. void addFirst(E e): Voegt het gespecificeerde element toe aan het begin van deze lijst.
  2. void addLast(E e): Voegt het gespecificeerde element toe aan het einde van deze lijst.
  3. E getFirst(): Retrieves, but does not remove, the first element of this list. This method differs from peekFirst only in that it throws an exception if this list is empty.
  4. E getLast(): Retrieves, but does not remove, the last element of this list. This method differs from peekLast only in that it throws an exception if this list is empty.
  5. E remvoeFirst(): Removes and returns the first element from this list.
  6. E removeLast(): Removes and returns the last element from this list.
  7. boolean offerFirst(E e): Voegt het gespecificeerde element toe aan de voorkant van deze lijst.
  8. boolean offerLast(E e): Voegt het gespecificeerde element toe aan het einde van deze lijst.
  9. E pollFirst(): Retrieves and removes the first element of this list, or returns null if this list is empty.
  10. E pollLast(): Retrieves and removes the last element of this list, or returns null if this list is empty.
  11. E peekFirst(): Retrieves, but does not remove, the first element of this list, or returns null if this list is empty.
  12. E peekLast(): Retrieves, but does not remove, the last element of this list, or returns null if this list is empty.

Java LinkedList Basisvoorbeeld

In deze sectie zullen we het hebben over een basisvoorbeeld van een Java LinkedList. We zullen in de komende secties wat meer handige bewerkingen verkennen. Voorbeeld:-

import java.util.LinkedList;
import java.util.List;

public class LinkedListDemo 
{
  public static void main(String[] args) 
  {
	List names = new LinkedList();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
        names.add(2011);
			
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());
  }
}

Output:-

LinkedList content: [Rams, Posa, Chinni, 2011]
LinkedList size: 4

Hier hebben we een LinkedList-object gemaakt en 4 items toegevoegd. Zoals besproken wordt de methode LinkedList.size() gebruikt om het aantal elementen in de lijst te krijgen. LET OP:- Zonder het gebruik van Generics ondersteunt Java LinkedList heterogene elementen. Het wordt echter niet aanbevolen om Collecties zonder Generics te gebruiken. Laten we de voordelen en het gebruik van Java Generics verkennen in de komende sectie met één eenvoudig voorbeeld.

Java LinkedList Generics

In deze sectie zullen we bespreken hoe Generics te gebruiken met Java LinkedList. Zoals we weten, zijn Java Generics handig om Type Safety-programmering te schrijven en sterkere typecontroles uit te voeren op compileertijd. Ze zijn ook nuttig om de overhead van casting te elimineren. Voorbeeld:-

import java.util.LinkedList;
import java.util.List;

public class LinkedListGenericsDemo
{
  public static void main(String[] args) 
  {
	List names = new LinkedList<>();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
        // We kunnen alleen Strings toevoegen
        // names.add(2011);
			
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());
  }
}

Output:-

LinkedList content: [Rams, Posa, Chinni]
LinkedList size: 3

Hier hebben we een LinkedList-object met Generics gemaakt en 3 items toegevoegd. Wanneer we proberen een getal toe te voegen aan LinkedList, wordt een compileerfout gegenereerd.

Java Array to LinkedList

In deze sectie zullen we verkennen hoe je een Java-array kunt converteren naar een LinkedList-object. We kunnen het op vele manieren doen, echter heb ik hier slechts één benadering gegeven. Voorbeeld:-


import java.util.LinkedList;
import java.util.List;

public class JavaArrayToLinkedListDemo 
{
	public static void main(String[] args) 
	{
		Integer[] numbers = {1,2,3,4,5};
		List<Integer> numbersList = new LinkedList<>();
		for(Integer s : numbers){
			numbersList.add(s);
		}
		System.out.println(numbersList);
	}
}

Output:-

[1, 2, 3, 4, 5]

Java LinkedList naar Array

In deze sectie zullen we verkennen hoe je een Java LinkedList kunt converteren naar een Array. We kunnen het op vele manieren doen, echter heb ik hier slechts één benadering gegeven. Voorbeeld:-

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

public class LinkedListToJavaArrayDemo 
{
	public static void main(String[] args) 
	{		
		List<Integer> numbersList = new LinkedList<>();
		numbersList.add(1);
		numbersList.add(2);
		numbersList.add(3);
		numbersList.add(4);
		numbersList.add(5);
		Integer[] numbers = new Integer[numbersList.size()];
		
		numbers = numbersList.toArray(numbers);
		System.out.println(Arrays.toString(numbers));

	}
}

Output:-

[1, 2, 3, 4, 5]

Java LinkedList Real-time Gebruiksscenario’s

In deze sectie zullen we bespreken wat de beste en wat de slechtste scenario’s zijn om LinkedList te gebruiken in Java-toepassingen. Best Gebruiksscenario:-

  • Wanneer onze vaak gebruikte operatie het toevoegen of verwijderen van elementen in het midden van de lijst is, is LinkedList de beste klasse om te gebruiken.

Waarom? Omdat we niet meer verschuivingen hoeven te doen om elementen toe te voegen of te verwijderen in het midden van de lijst. Raadpleeg de sectie “Hoe werkt invoegen in Java LinkedList?” voor een gedetailleerde uitleg. Slechtste Gebruiksscenario:-

  • Wanneer onze veelgebruikte bewerking het ophalen van elementen uit een lijst is, dan is LinkedList de slechtste keuze.

Waarom? Omdat LinkedList alleen sequentiële toegang ondersteunt, en geen willekeurige toegang. Raadpleeg de sectie “Hoe werkt verwijdering in Java LinkedList?” voor een gedetailleerd begrip. LET OP:- LinkedList implementeert List, Deque, Cloneable en Serializable. Maar het implementeert geen RandomAccess-interface.

Interne representatie van Java LinkedList

Zoals we weten, wordt intern Java LinkedList geïmplementeerd met behulp van een Dubbel Gekoppelde Lijst. Dus Java LinkedList representeert zijn elementen als knooppunten. Elk knooppunt is verdeeld in 3 delen zoals hieronder getoond. Hier wordt elk knooppunt voor een specifiek doel gebruikt.

  1. Het linkerdeel van het knooppunt wordt gebruikt om naar het vorige knooppunt (of element) in de LinkedList te wijzen.
  2. Het rechterdeel van het knooppunt wordt gebruikt om naar het volgende knooppunt (of element) in de LinkedList te wijzen.
  3. Het middelste deel van het knooppunt wordt gebruikt om de werkelijke gegevens op te slaan.

OPMERKING:- In JVM slaat LinkedList zijn elementen NIET op in opeenvolgende volgorde op. Het slaat zijn elementen op op elke beschikbare ruimte en ze zijn met elkaar verbonden door de linker- en rechterkant van de knooppunten zoals getoond in het onderstaande diagram.

Hoe werkt het invoegen in Java LinkedList?

We hebben al gezien hoe LinkedList zijn elementen opslaat als knooppunten in de vorige sectie. In deze sectie zullen we bespreken hoe de invoegbewerking van Java LinkedList intern werkt.

  1. Laten we aannemen dat onze initiële LinkedList de volgende gegevens heeft.
    3. Voer de volgende invoegbewerking uit op deze LinkedList
linkedList.add(2,54);

Hier proberen we een invoegbewerking uit te voeren om een nieuw element met waarde “54” toe te voegen op index 2.5. De bijgewerkte LinkedList ziet er als volgt uit.

Hoe werkt verwijdering in Java LinkedList?

We hebben al gezien hoe de LinkedList intern de invoeroperatie uitvoert in het vorige gedeelte. In dit gedeelte zullen we bespreken hoe de interne werking van de verwijderingsoperatie van Java LinkedList is.

  1. Laten we aannemen dat onze oorspronkelijke LinkedList de volgende gegevens bevat.
    3. Voer de volgende invoeroperatie uit op deze LinkedList
linkedList.remove(3);

Hier proberen we een verwijderingsoperatie uit te voeren om een element te verwijderen dat beschikbaar is op index 3.5. De bijgewerkte LinkedList ziet er als volgt uit.

Java LinkedList Deque-operaties

Hier zullen we verkennen hoe een LinkedList-object werkt als een Deque. We gebruiken deze operaties om Wachtrijen of Stacks te implementeren. We zullen in mijn komende berichten diepgaand bespreken hoe een Stack of Wachtrijen werkt. Voorbeeld:-

import java.util.LinkedList;
import java.util.LinkedList;
import java.util.Deque;

public class LinkedListDequeOperationsDemo 
{
  public static void main(String[] args) 
  {
	Deque names = new LinkedList();
	names.add(2);
	names.addFirst(1);
	names.addLast(3);
	names.addFirst(0);
	names.addLast(4);
			
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());
	names.removeFirst();
	names.removeLast();
	
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());	
  }
}

Output:-

LinkedList content: [0, 1, 2, 3, 4]
LinkedList size: 5
LinkedList content: [1, 2, 3]
LinkedList size: 3

Java SE 8: Java LinkedList naar Stream

Hier zullen we verkennen hoe je een LinkedList-object kunt converteren naar het Java SE 8 Stream-concept. Voorbeeld:-

import java.util.LinkedList;
import java.util.List;

public class LinkedListToStreamDemo 
{
  public static void main(String[] args) 
  {		
	List numbersList = new LinkedList<>();
	numbersList.add(1);
	numbersList.add(2);
	numbersList.add(3);
	numbersList.add(4);
	numbersList.add(5);
		
	//converteer List naar stream
	numbersList.stream().forEach(System.out::println);
  }
}

Output:-

1
2
3
4
5

Java SE 9 LinkedList

In Java SE 9 gaat Oracle Corp enkele nuttige hulpprogramma-methoden toevoegen om een onveranderlijke lijst te maken. Als je ze grondig wilt leren, samen met enkele nuttige voorbeelden, ga dan naar mijn bericht op: Java SE 9: Fabrieksmethoden voor onveranderlijke lijst Dat is alles voor een snelle samenvatting over LinkedList in Java. Ik hoop dat deze Java LinkedList-voorbeelden je helpen om aan de slag te gaan met LinkedList-programmering. Bedankt voor het lezen van mijn tutorials. Laat me een reactie achter als je mijn tutorials leuk vindt of als je problemen, suggesties of typefouten hebt.

Source:
https://www.digitalocean.com/community/tutorials/java-linkedlist-linkedlist-java