LinkedList ist eine doppelt verknüpfte Listenimplementierungsklasse im Java-Collection-Framework. Sie kann Elemente dynamisch hinzufügen oder löschen und unterstützt Einfüge- und Löschvorgänge an jedem Ort. In der LinkedList-Klasse ist die Methode indexOf() eine häufig verwendete Operation. Sie wird verwendet, um die Position zu finden, an der ein bestimmtes Element zum ersten Mal in der verknüpften Liste erscheint. In diesem Artikel werden die Funktion dieser Methode und ihre Verwendung ausführlich vorgestellt .
Die Syntax der indexOf()-Methode der LinkedList-Klasse lautet wie folgt:
public int indexOf(Object o) { int index = 0; if (o == null) { for (Node<E> x = first; x != null; x = x.next) { if (x.item == null) { return index; } index++; } } else { for (Node<E> x = first; x != null; x = x.next) { if (o.equals(x.item)) { return index; } index++; } } return -1; }
Diese Methode empfängt einen Objekttypparameter o als Eingabe, der das zu findende Element darstellt. Die Methode gibt einen Wert vom Typ int zurück, der die Position angibt, an der das Element zum ersten Mal in der verknüpften Liste erscheint (beginnend bei 0). Wenn das Element nicht in der verknüpften Liste vorhanden ist, wird -1 zurückgegeben.
Um das Implementierungsprinzip dieser Methode besser zu verstehen, wird im Folgenden eine detaillierte Funktionsanalyse dieser Methode durchgeführt.
Um die Position des Elements in der verknüpften Liste zu ermitteln, müssen wir zunächst die gesamte verknüpfte Liste durchlaufen und eine nach der anderen suchen, beginnend mit dem ersten Knoten der verknüpften Liste Daher verwendet diese Methode zwei for-Schleifen und ihre Funktionen bestehen darin, die verknüpfte Liste zu durchlaufen und Elemente zu finden. Der Code lautet wie folgt:
for (Node<E> x = first; x != null; x = x.next) { if (o.equals(x.item)) { return index; } index++; }
Dieser Code bedeutet, vom ersten Knoten der verknüpften Liste aus zu durchlaufen Knoten der verknüpften Liste nacheinander bis zum Ende der verknüpften Liste (d. h. wenn x null ist). Bei jedem Durchlauf ermitteln wir, ob das Element im aktuellen Knoten dem zu findenden Element entspricht. Wenn es gleich ist, geben wir die Position des Knotens in der verknüpften Liste (dh die Indexvariable) zurück, andernfalls fahren wir mit dem nächsten Durchlauf fort.
Beim Durchlaufen von Knoten müssen wir feststellen, ob das angegebene Element in der verknüpften Liste vorhanden ist. In der Methode wird eine if-Anweisung verwendet, um diese Funktion zu implementieren. Der Code lautet wie folgt:
if (o.equals(x.item)) { return index; }
In dieser Anweisung bedeutet o.equals(x.item), zu bestimmen, ob das durch o dargestellte Element gleich dem Element x ist. Element im Knoten, zu dem derzeit eine Schleife ausgeführt wird. Wenn sie gleich sind, wird die Position des Knotens in der verknüpften Liste (dh die Indexvariable) zurückgegeben, andernfalls fahren Sie mit dem nächsten Durchlauf fort.
Es ist zu beachten, dass bei der Bestimmung, ob ein Element vorhanden ist und das Element null ist, item==null anstelle von o.equals(x.item) verwendet werden sollte. Daher benötigt diese Methode auch eine zusätzliche if-Anweisung, um diese Situation zu behandeln. Der Code lautet wie folgt:
if (x.item == null) { return index; }
x.item==null bedeutet, dass das Element im Knoten, zu dem derzeit eine Schleife ausgeführt wird, null ist gefunden werden ist auch Wenn null, wird die Position des Knotens in der verknüpften Liste (d. h. Indexvariable) zurückgegeben, andernfalls fahren Sie mit der nächsten Durchquerung fort.
Wenn schließlich das gesuchte Element nach dem Durchlaufen der gesamten verknüpften Liste immer noch nicht gefunden wird, gibt die Methode -1 zurück, was darauf hinweist, dass das Element in der verknüpften Liste nicht vorhanden ist. Der Code lautet wie folgt:
return -1;
Daher sollten wir bei Verwendung dieser Methode anhand des Rückgabewerts beurteilen, ob das gesuchte Element in der verknüpften Liste vorhanden ist. Wenn der Rückgabewert -1 ist, bedeutet dies, dass das Element existiert nicht, andernfalls ist die zurückgegebene Zahl die Position des ersten Vorkommens dieses Elements in der verknüpften Liste.
Das Folgende ist ein spezifisches Codebeispiel, um die Verwendung dieser Methode zu veranschaulichen:
import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList<String> list = new LinkedList<String>(); list.add("apple"); list.add("banana"); list.add("grape"); list.add("orange"); list.add("peach"); int index = list.indexOf("apple"); if (index != -1) { System.out.println("apple在链表中的位置是:" + index); } else { System.out.println("链表中不存在apple"); } index = list.indexOf("watermelon"); if (index != -1) { System.out.println("watermelon在链表中的位置是:" + index); } else { System.out.println("链表中不存在watermelon"); } } }
Der Code erstellt zunächst eine LinkedList-Objektliste und fügt 5 Elemente hinzu. Anschließend wird mit der Methode indexOf() die Position der beiden Elemente „Apfel“ und „Wassermelone“ in der verknüpften Liste ermittelt, anhand des Rückgabewerts ermittelt, ob die beiden Elemente in der verknüpften Liste vorhanden sind, und schließlich ausgegeben Ergebnis.
Wenn wir diesen Code ausführen, können wir die folgende Ausgabe erhalten:
apple在链表中的位置是:0 链表中不存在watermelon
Es ist ersichtlich, dass diese Methode sehr leistungsfähig ist und uns helfen kann, schnell die Position des angegebenen Elements in der verknüpften Liste zu finden und unsere eigene Geschäftslogik zu implementieren. Beachten Sie jedoch bei Verwendung dieser Methode, dass die zeitliche Komplexität O (n) beträgt. Das heißt, mit zunehmender Anzahl verknüpfter Listenelemente wird die Suchzeit immer länger. Wenn Sie diese Methode verwenden, sollten Sie dies daher versuchen Vermeiden Sie das Durchlaufen der gesamten verknüpften Liste, sondern sollten Sie entsprechend der tatsächlichen Situation optimieren.
Das obige ist der detaillierte Inhalt vonInterpretation der Java-Dokumentation: Analyse der indexOf()-Methodenfunktion der LinkedList-Klasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!