Analyse des Java LinkedList-Quellcodes (Bild)
Allgemeine Einführung
LinkedList implementiert sowohl die ListSchnittstelle als auch die Deque-Schnittstelle, was bedeutet, dass es sowohl als sequenzieller Container als auch als Warteschlange (Warteschlange) betrachtet werden kann. und kann auch als Stapel (Stack) betrachtet werden. Aus dieser Sicht ist LinkedList einfach ein Allround-Champion. Wenn Sie einen Stapel oder eine Warteschlange verwenden müssen, sollten Sie als Erstes LinkedList in Betracht ziehen. Da Java offiziell erklärt hat, dass die Verwendung der Stack-Klasse nicht empfohlen wird, wird die Verwendung von LinkedList empfohlen. Noch bedauerlicher ist, dass es in Java keine Klasse namens Queue gibt (es ist ein Schnittstellenname).
Die zugrunde liegende Ebene von LinkedList wird durch eine doppelt verknüpfte Liste implementiert. Dieser Abschnitt konzentriert sich auf den Wartungsprozess einer doppelt verknüpften Liste beim Einfügen und Löschen Elemente, also die Lösung zwischen den -Funktionen im Zusammenhang mit der List-Schnittstelle und dem Wissen im Zusammenhang mit Queue, Stack und Deque, werden im nächsten Abschnitt besprochen. Jeder Knoten einer doppelt verknüpften Liste wird durch die innere Klasse Node repräsentiert. LinkedList-Referenzen first
bis last
und , um auf das erste bzw. letzte Element der verknüpften Liste zu verweisen. Beachten Sie, dass es hier kein sogenanntes Dummy-Element gibt. Wenn die verknüpfte Liste leer ist, verweisen sowohl first
als auch last
auf <a href="http://www.php.cn/wiki/62%20.html" target=" _blank">null<code><a href="http://www.php.cn/wiki/62.html" target="_blank">null</a>
.
//Node内部类 private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
Die Implementierung von LinkedList bestimmt, dass alle tiefgestellten Vorgänge lineare Zeit erfordern und das Löschen von Elementen am Anfang oder Ende nur konstante Zeit erfordert. Aus Effizienzgründen implementiert LinkedList keine Synchronisierung (synchronized). Wenn ein gleichzeitiger Zugriff durch mehrere Threads erforderlich ist, können Sie ihn zuerst mit der Collections.synchronizedList()
-Methode umschließen.
Methodenanalyse
add()
add()-Methode hat zwei Versionen, eine ist add(E e)
, diese Methode fügt Elemente am Ende von LinkedList ein, weil es < gibt 🎜>Zeigt auf das Ende der verknüpften Liste und das Einfügen von Elementen am Ende nimmt konstant Zeit in Anspruch. Sie müssen nur einige relevante Referenzen ändern. Die andere besteht darin, Elemente in die unten angegebene Tabelle einzufügen. Sie müssen zuerst die spezifische Position durch lineare Suche finden und dann die relevanten Referenzen ändern, um sie zu vervollständigen Einfügevorgang. last
add(int index, E element)
In Kombination mit dem obigen Bild können wir sehen, dass die Logik von
add(E e)
//add(E e) public boolean add(E e) { final Node<E> l = last; final Node<E> newNode = new Node<>(l, e, null); last = newNode; if (l == null) first = newNode;//原来链表为空,这是插入的第一个元素 else l.next = newNode; size++; return true; }
add(int index, E element)
//add(int index, E element) public void add(int index, E element) { checkPositionIndex(index);//index >= 0 && index <= size; if (index == size)//插入位置是末尾,包括列表为空的情况 add(element); else{ Node<E> succ = node(index);//1.先根据index找到要插入的位置 //2.修改引用,完成插入操作。 final Node<E> pred = succ.prev; final Node<E> newNode = new Node<>(pred, e, succ); succ.prev = newNode; if (pred == null)//插入位置为0 first = newNode; else pred.next = newNode; size++; } }
, das heißt, ob sich der Index nahe am Front-End oder am Back-End befindet. Die Methode node(int index)
index < (size >> 1)
remove()
remove(<a href="http" entspricht :// www.php.cn/wiki/60.html" target="_blank">Object<p> o)
, das andere besteht darin, das Element remove()
am angegebenen Index zu löschen. remove(<a href="http://www.php.cn/wiki/60.html" target="_blank">Object</a> o)
remove(int index)
Beide Löschvorgänge erfordern 1. Zuerst das Finden der Referenz des zu löschenden Elements, 2. Ändern der relevanten Referenz, um den Löschvorgang abzuschließen. Bei der Suche nach der gelöschten Elementreferenz ruft
des Elements auf, während remove(Object o)
die Indexzählung verwendet. Beide Methoden haben eine lineare Zeitkomplexität. In Schritt 2 werden beide equals
-Methoden über die remove(int index)
-Methode vervollständigt. Hier müssen Sie den Grenzfall berücksichtigen, bei dem das gelöschte Element das erste oder letzte ist. revome()
unlink(Node<E> x)
//unlink(Node<E> x),删除一个Node E unlink(Node<E> x) { final E element = x.item; final Node<E> next = x.next; final Node<E> prev = x.prev; if (prev == null) {//删除的是第一个元素 first = next; } else { prev.next = next; x.prev = null; } if (next == null) {//删除的是最后一个元素 last = prev; } else { next.prev = prev; x.next = null; } x.item = null;//let GC work size--; return element; }
-Methode erreicht wird. Die Methode get(int index)
node(int index)
public E get(int index) { checkElementIndex(index);//index >= 0 && index < size; return node(index).item; }
und ändert dann den Wert von set(int index, E element)
in node(int index)
. Node
item
Das obige ist der detaillierte Inhalt vonAnalyse des Java LinkedList-Quellcodes (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4
