0

これは、 Oracle の Web サイトにindexOf()あるのサンプル実装です。ここでループLinkedListがどのように機能するかについて少し混乱しています:if

public int indexOf(E e) {
    for (ListIterator<E> it = listIterator(); it.hasNext(); )
        if (e == null ? it.next() == null : e.equals(it.next()))
            return it.previousIndex();
    // Element not found
    return -1;
}

したがって、ListIteratorオブジェクトはリストの先頭に作成されます。for反復子がリストの最後に到達するまでループが続き、ifループはターゲット オブジェクトが見つかるかどうかをチェックします。私が理解していなかった部分は、ifループがit.next() == nullいつチェックするのはなぜe == nullですか? 入力 e が null の場合にどのように行われるかを誰かが教えてくれますか?

4

4 に答える 4

5

ループは、評価時に NullPointerException を回避するためにこれが行われるかどうかit.next() == nullのみをチェックします。e == nulle.equals(it.next())

の場合e != null、通常のe.equals()メソッドが呼び出されます。

nullに挿入できる有効な「要素」であるLinkedListため、これを考慮する必要があります。

最後の要素の位置は挿入されません。リンク リストの最後の要素が であるテキスト ブックのデータ構造とは異なり、ここでは、最後の要素にnull到達すると、it.hasNext()この「ジャンク」要素を表示せずに false と評価されることに注意してください。

于 2012-10-15T23:05:58.093 に答える
0

eisの場合null、メソッドは、渡された反復可能なオブジェクトで別の要素がindexOf()見つかるまで反復し、そのインデックスを返します。null

于 2012-10-15T23:05:18.070 に答える
0

三項演算子に関して何が起こっているのかを誤解していると思います。

この行:

if (e == null ? it.next() == null : e.equals(it.next()))

e が nullあることを確認し、そうである場合は、反復子の次の要素が nullであることを確認します (これにより、 NullPointerExceptionを回避するために反復操作が効果的に停止します)。その中のいくつかの値)、比較を実行します。

e.equals(it.next())
于 2012-10-15T23:08:48.237 に答える
0

if (e == null ? it.next() == null : e.equals(it.next()))- これは Java 三項演算子です

it.next() == nulltrue の場合は null チェックです (これが最後の要素かどうかを確認するために true または false を返します)

return it.previousIndex();実行します

e が null でない場合、

e.equals(it.next())

実行し、それがtrueの場合、

return it.previousIndex();実行します

これは、インデックスが必要な要素のインデックスです。私の説明が混乱しないことを願っています。

于 2012-10-15T23:12:16.643 に答える