Java LinkedList ist eine Implementierung der List- und Deque-Schnittstellen. Es ist eine häufig verwendete Klasse für Listenimplementierungen. Es erweitert AbstractSequentialList und implementiert die List- und Deque-Schnittstellen. Es handelt sich um eine geordnete Sammlung und unterstützt doppelte Elemente. Die Elemente werden in der Reihenfolge ihrer Einfügung gespeichert. Es ermöglicht das Hinzufügen von null-Elementen und unterstützt indexbasierte Operationen. Wenn Sie mehr über die Grundlagen von Listen erfahren möchten, lesen Sie bitte diesen Beitrag: Java List.
Beitrag Kurzer Inhaltsverzeichnis
In diesem Beitrag werden die folgenden Konzepte diskutiert.
- Java LinkedList
- Java LinkedList Klassendiagramm
- Java LinkedList List Methoden
- Java LinkedList Deque Methoden
- Java LinkedList Grundbeispiel
- Java LinkedList Generics
- Java Array zu LinkedList
- Java LinkedList zu Array
- Java LinkedList Echtzeit-Anwendungsfälle
- Interne Darstellung von Java LinkedList
- Wie die Einfügung in Java LinkedList funktioniert
- Wie die Löschung in Java LinkedList funktioniert
- Java LinkedList Deque Operationen
- Java SE 8: Java LinkedList zu Stream
- Java SE 9: LinkedList
Java LinkedList
In diesem Abschnitt werden einige wichtige Punkte zu Java LinkedList diskutiert:
- Die Java LinkedList-Klasse ist ein Mitglied des Java Collections Frameworks.
- Sie ist eine Implementierung der List- und Deque-Schnittstellen.
- Intern wird sie unter Verwendung der Datenstruktur der doppelt verketteten Liste implementiert.
- Sie unterstützt doppelte Elemente.
- Sie speichert oder behält ihre Elemente in der Reihenfolge der Einfügung bei.
- Wir können beliebig viele Null-Elemente hinzufügen.
- Sie ist nicht synchronisiert, das bedeutet, sie ist nicht thread-sicher.
- Wir können eine synchronisierte LinkedList mithilfe der Methode Collections.synchronizedList() erstellen.
- In Java-Anwendungen können wir sie als Liste, Stapel oder Warteschlange verwenden.
- Sie implementiert nicht das RandomAccess-Interface. Daher können wir nur sequenziell auf Elemente zugreifen. Sie unterstützt keinen zufälligen Zugriff auf Elemente.
- Wenn wir versuchen, auf ein Element aus einer LinkedList zuzugreifen, beginnt die Suche nach diesem Element am Anfang oder Ende der LinkedList, je nachdem, wo dieses Element verfügbar ist.
- Wir können ListIterator verwenden, um LinkedList-Elemente zu durchlaufen.
- Ab Java SE 8 können wir eine LinkedList in einen Stream und umgekehrt konvertieren.
- In Java SE 9 werden ein paar Factory-Methoden hinzugefügt, um eine unveränderliche LinkedList zu erstellen.
Klassen Diagramm der Java LinkedList
Wie wir wissen, ist Java LinkedList eine Implementierungsklasse für Listen. Sie implementiert auch Deque. Wie im folgenden Klassendiagramm gezeigt, erweitert sie nicht direkt die Klasse AbstractList, sondern die Klasse AbstractSequentialList.
Java LinkedList Listenmethoden
In diesem Abschnitt werden einige nützliche und häufig verwendete Methoden der Java LinkedList besprochen. Die folgenden Methoden werden von der List- oder Collection-Schnittstelle geerbt:
- int size(): um die Anzahl der Elemente in der Liste zu erhalten.
- boolean isEmpty(): um zu überprüfen, ob die Liste leer ist oder nicht.
- boolean contains(Object o): Gibt true zurück, wenn diese Liste das angegebene Element enthält.
- Iterator iterator(): Gibt einen Iterator über die Elemente in dieser Liste in der richtigen Reihenfolge zurück.
- Object[] toArray(): Gibt ein Array zurück, das alle Elemente in dieser Liste in der richtigen Reihenfolge enthält.
- boolean add(E e): Fügt das angegebene Element am Ende dieser Liste an.
- boolean remove(Object o): Entfernt das erste Vorkommen des angegebenen Elements aus dieser Liste.
- boolean retainAll(Collection c): Behält nur die Elemente in dieser Liste, die in der angegebenen Sammlung enthalten sind.
- void clear(): Entfernt alle Elemente aus der Liste.
- E get(int index): Returns the element at the specified position in the list.
- E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
- ListIterator listIterator(): Gibt einen Listeniterator über die Elemente in der Liste zurück.
- List subList(int fromIndex, int toIndex): Gibt eine Ansicht des Teils dieser Liste zwischen dem angegebenen fromIndex (inklusive) und toIndex (exklusive) zurück. Die zurückgegebene Liste wird von dieser Liste unterstützt, sodass nicht strukturelle Änderungen in der zurückgegebenen Liste in dieser Liste reflektiert werden und umgekehrt.
Java LinkedList Deque Methoden
Die folgenden Methoden sind spezifisch für die LinkedList-Klasse, die von der Deque-Schnittstelle geerbt werden:
- void addFirst(E e): Fügt das angegebene Element am Anfang dieser Liste ein.
- void addLast(E e): Fügt das angegebene Element am Ende dieser Liste ein.
- 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.
- 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.
- E remvoeFirst(): Removes and returns the first element from this list.
- E removeLast(): Removes and returns the last element from this list.
- boolean offerFirst(E e): Fügt das angegebene Element am Anfang dieser Liste ein.
- boolean offerLast(E e): Fügt das angegebene Element am Ende dieser Liste ein.
- E pollFirst(): Retrieves and removes the first element of this list, or returns null if this list is empty.
- E pollLast(): Retrieves and removes the last element of this list, or returns null if this list is empty.
- E peekFirst(): Retrieves, but does not remove, the first element of this list, or returns null if this list is empty.
- E peekLast(): Retrieves, but does not remove, the last element of this list, or returns null if this list is empty.
Java LinkedList Grundbeispiel
In diesem Abschnitt werden wir ein grundlegendes Beispiel für eine Java-LinkedList diskutieren. Wir werden in den kommenden Abschnitten einige weitere nützliche Operationen erkunden. Beispiel:-
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());
}
}
Ausgabe:-
LinkedList content: [Rams, Posa, Chinni, 2011]
LinkedList size: 4
Hier haben wir ein LinkedList-Objekt erstellt und 4 Elemente hinzugefügt. Wie besprochen, wird die Methode LinkedList.size() verwendet, um die Anzahl der Elemente in der Liste zu erhalten. HINWEIS:- Ohne die Verwendung von Generics unterstützt Java LinkedList heterogene Elemente. Es wird jedoch nicht empfohlen, Collections ohne Generics zu verwenden. Lassen Sie uns die Vorteile und die Verwendung von Java Generics im kommenden Abschnitt anhand eines einfachen Beispiels erkunden.
Java LinkedList Generics
In diesem Abschnitt werden wir diskutieren, wie man Generics mit Java LinkedList verwendet. Wie wir wissen, sind Java Generics nützlich, um eine typsichere Programmierung zu schreiben und stärkere Typüberprüfungen zur Compilezeit durchzuführen. Sie sind auch nützlich, um den Aufwand für das Casten zu eliminieren. Beispiel:-
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");
// Wir können nur Strings hinzufügen
// names.add(2011);
System.out.println("LinkedList content: " + names);
System.out.println("LinkedList size: " + names.size());
}
}
Ausgabe:-
LinkedList content: [Rams, Posa, Chinni]
LinkedList size: 3
Hier haben wir ein LinkedList-Objekt mit Generics erstellt und 3 Elemente hinzugefügt. Wenn wir versuchen, eine Zahl für die LinkedList hinzuzufügen, wird ein Compile-Zeitfehler ausgelöst.
Java Array zu LinkedList
In diesem Abschnitt werden wir untersuchen, wie man ein Java-Array in ein LinkedList-Objekt umwandelt. Wir können es auf viele Arten tun, aber ich habe hier nur einen Ansatz gegeben. Beispiel:-
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);
}
}
Ausgabe:-
[1, 2, 3, 4, 5]
Java LinkedList zu Array
In diesem Abschnitt werden wir untersuchen, wie man eine Java-LinkedList in ein Array umwandelt. Wir können es auf viele Arten tun, aber ich habe hier nur einen Ansatz gegeben. Beispiel:-
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));
}
}
Ausgabe:-
[1, 2, 3, 4, 5]
Java-LinkedList-Echtzeitanwendungen
In diesem Abschnitt werden wir darüber diskutieren, was die besten und die schlechtesten Szenarien für die Verwendung von LinkedList in Java-Anwendungen sind. Bestes Anwendungsszenario:-
- Wenn unsere häufig verwendete Operation das Hinzufügen oder Entfernen von Elementen in der Mitte der Liste ist, ist LinkedList die beste Klasse, die verwendet werden kann.
Warum? Weil wir keine weiteren Verschiebungen vornehmen müssen, um Elemente in der Mitte der Liste hinzuzufügen oder zu entfernen. Bitte lesen Sie den Abschnitt „Wie funktioniert das Einfügen in Java LinkedList?“ um es im Detail zu verstehen. Schlechtestes Anwendungsszenario:-
- Wenn unsere häufig verwendete Operation darin besteht, Elemente aus einer Liste abzurufen, ist LinkedList die schlechteste Wahl.
Warum? Weil LinkedList nur sequentiellen Zugriff unterstützt und keinen zufälligen Zugriff unterstützt. Bitte beachten Sie den Abschnitt „Wie funktioniert Löschung in Java LinkedList?“ für eine detaillierte Erklärung. HINWEIS:- LinkedList implementiert List, Deque, Cloneable und Serializable. Es implementiert jedoch nicht das RandomAccess-Interface.
Interne Darstellung von Java LinkedList
Wie wir wissen, wird Java LinkedList intern mit einer doppelt verketteten Liste implementiert. Daher repräsentiert Java LinkedList seine Elemente als Knoten. Jeder Knoten ist in 3 Teile unterteilt, wie unten gezeigt. Hier wird jeder Knoten für einen bestimmten Zweck verwendet.
- Der linke Knotenteil wird verwendet, um auf den vorherigen Knoten (oder das vorherige Element) in der LinkedList zu zeigen.
- Der rechte Knotenteil wird verwendet, um auf den nächsten Knoten (oder das nächste Element) in der LinkedList zu zeigen.
- Der mittlere Knotenteil wird verwendet, um die tatsächlichen Daten zu speichern.
HINWEIS:- In der JVM speichert LinkedList ihre Elemente NICHT in aufeinander folgender Reihenfolge. Sie speichert ihre Elemente an einem beliebigen verfügbaren Ort, und sie sind miteinander verbunden durch die linken und rechten Node-Teile, wie im untenstehenden Diagramm gezeigt.
Wie funktioniert die Einfügung in der Java-LinkedList?
Wir haben bereits gesehen, wie LinkedList ihre Elemente als Nodes speichert, wie im vorherigen Abschnitt erklärt. In diesem Abschnitt werden wir darüber sprechen, wie die Einfügeoperation der Java-LinkedList intern funktioniert.
- Nehmen wir an, unsere ursprüngliche LinkedList enthält die folgenden Daten.
3. Führen Sie die folgende Einfügeoperation auf dieser LinkedList aus
linkedList.add(2,54);
Hier versuchen wir, die Einfügeoperation durchzuführen, um ein neues Element mit dem Wert „54“ am Index 2,5 hinzuzufügen. Die aktualisierte LinkedList sieht wie folgt aus.
Wie funktioniert die Löschung in der Java-LinkedList?
Wir haben bereits gesehen, wie LinkedList die Einfügeoperation intern im vorherigen Abschnitt durchführt. In diesem Abschnitt werden wir besprechen, wie die Löschoperation von Java LinkedList intern funktioniert.
- Nehmen wir an, unsere anfängliche LinkedList die folgenden Daten hat.
3. Führen Sie die folgende Einfügeoperation auf dieser LinkedList durch
linkedList.remove(3);
Hier versuchen wir, die Löschoperation durchzuführen, um ein Element zu löschen, das sich am Index 3.5 befindet. Die aktualisierte LinkedList sieht wie folgt aus.
Java LinkedList Deque-Operationen
Hier werden wir erkunden, wie ein LinkedList-Objekt als Deque funktioniert. Wir verwenden diese Operationen, um Warteschlangen oder Stapel zu implementieren. Wir werden ausführlich besprechen, wie ein Stapel oder eine Warteschlange in meinen kommenden Beiträgen funktioniert. Beispiel:-
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());
}
}
Ausgabe:-
LinkedList content: [0, 1, 2, 3, 4]
LinkedList size: 5
LinkedList content: [1, 2, 3]
LinkedList size: 3
Java SE 8: Java LinkedList zu Stream
Hier werden wir erkunden, wie man ein LinkedList-Objekt in das Java-SE-8-Stream-Konzept umwandelt. Beispiel:-
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);
// Liste in Stream konvertieren
numbersList.stream().forEach(System.out::println);
}
}
Ausgabe:-
1
2
3
4
5
Java SE 9 LinkedList
In Java SE 9 plant Oracle Corp einige nützliche Hilfsmethoden hinzuzufügen, um eine unveränderliche Liste zu erstellen. Wenn Sie sie eingehend mit einigen nützlichen Beispielen lernen möchten, lesen Sie bitte meinen Beitrag unter: Java SE 9: Factory Methods für unveränderliche Liste Das ist alles für einen schnellen Überblick über LinkedList in Java. Ich hoffe, diese Java-LinkedList-Beispiele helfen Ihnen beim Einstieg in die LinkedList-Programmierung. Vielen Dank für das Lesen meiner Tutorials. Bitte hinterlassen Sie einen Kommentar, wenn Ihnen meine Tutorials gefallen oder wenn Sie Probleme, Vorschläge oder Fehler gefunden haben.
Source:
https://www.digitalocean.com/community/tutorials/java-linkedlist-linkedlist-java