LinkedList は、Java コレクション フレームワークの二重リンク リスト実装クラスであり、要素を動的に追加または削除でき、任意の場所での挿入および削除操作をサポートします。 LinkedList クラスでは、indexOf() メソッドがよく使われます。リンクされたリスト内で指定された要素が最初に出現する位置を見つけるために使用されます。この記事では、このメソッドの機能と使用方法を詳しく紹介します。 。
LinkedList クラスのindexOf() メソッドの構文は次のとおりです。
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; }
このメソッドは、検索される要素を表すオブジェクト型パラメーター o を入力として受け取ります。このメソッドは、要素がリンク リスト内で最初に出現する位置 (0 から始まる) を示す、int 型の値を返します。要素がリンク リストに存在しない場合は、-1 を返します。
このメソッドの実装原理をよりよく理解するために、このメソッドの詳細な機能分析を以下で実行します。
まず、リンクされたリスト内の要素の位置を見つけるために、リンクされたリスト全体を走査して検索する必要があります。リンク リストの最初のノードから 1 つずつ開始するため、このメソッドでは 2 つの for ループが使用されます。それらの機能は、それぞれリンク リストを走査し、要素を見つけることです。コードは次のとおりです:
for (Node<E> x = first; x != null; x = x.next) { if (o.equals(x.item)) { return index; } index++; }
このコードは、リンク リストの最初のノードから開始し、リンク リストの終わり (つまり、x が null の場合) まで、リンク リストのノードを 1 つずつたどることを意味します。各走査中に、現在のノードの要素が検索対象の要素と等しいかどうかを判断します。等しい場合は、リンク リスト内のノードの位置 (つまり、インデックス変数) を返し、そうでない場合は次の走査を続行します。
ノードを移動するプロセスでは、指定された要素がリンク リストに存在するかどうかを判断する必要があります。この関数を実装するメソッドには if ステートメントが使用されており、コードは次のとおりです:
if (o.equals(x.item)) { return index; }
このステートメントでは、o.equals(x.item) は、o で表される要素が要素と等しいかどうかを示します。現在ループされているノード内の x.item が等しい場合は、リンクされたリスト (つまり、インデックス変数) 内のノードの位置を返し、そうでない場合は次のトラバーサルを続行します。
要素が存在するかどうかを判断するとき、要素が null の場合は、o.equals(x.item) の代わりに item==null を使用する必要があることに注意してください。したがって、このメソッドには、この状況を処理するための追加の if ステートメントも必要です。コードは次のとおりです: このステートメントの
if (x.item == null) { return index; }
x.item==null は、現在ループされているノード内の要素が null であることを意味します。 「要素も null である」を検索したい場合は、リンクされたリスト内のノードの位置 (つまり、インデックス変数) が返されます。それ以外の場合は、次の走査が続行されます。
最後に、リンク リスト全体を走査しても探している要素が見つからない場合、メソッドは -1 を返します。これは、次のことを示します。リンクされたリストの中央には要素が存在しません。コードは次のとおりです:
return -1;
したがって、このメソッドを使用する場合は、戻り値に基づいて、探している要素がリンク リストに存在するかどうかを判断する必要があります。要素が存在しないことを意味します。それ以外の場合、返される数値は、リンクされたリスト内で要素が最初に出現する位置です。
次は、このメソッドの使用法を示す具体的なコード例です。
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"); } } }
このコードは、まず LinkedList オブジェクト リストを作成し、5 つの要素を追加します。次に、indexOf() メソッドを使用して、リンク リスト内の 2 つの要素「apple」と「watermelon」の位置を検索し、戻り値に基づいて 2 つの要素がリンク リストに存在するかどうかを判断し、最終的に結果。
このコードを実行すると、次の出力が得られます。
apple在链表中的位置是:0 链表中不存在watermelon
このメソッドは非常に強力であり、指定された要素の位置を素早く見つけるのに役立つことがわかります。リンクリストを作成し、独自のビジネスロジックを実現します。ただし、この方法を使用する場合は、時間計算量が O(n) であることに注意してください。つまり、リンクされたリストの要素の数が増えると、検索時間がますます長くなります。そのため、この方法を使用する場合は、次のことを試してください。リンクされたリスト全体を走査することは避けてください。ただし、実際の状況に応じて最適化する必要があります。
以上がJavaドキュメントの解釈: LinkedListクラスのindexOf()メソッド関数の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。