簡體   English   中英

有人可以幫忙解釋一下indexOf()實現的工作原理嗎?

[英]could someone help explain how this indexOf() implementation works?

這是Oracle網站上LinkedListindexOf()的示例實現。 我對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時, it.next() == null e == null嗎? 當輸入e為null時,有人可以幫助我完成操作嗎?

循環僅在e == null檢查it.next() == null這樣做是為了避免在評估e.equals(it.next())e.equals(it.next()) NullPointerException。

如果e != null ,則調用常規的e.equals()方法。

null是可以插入到LinkedList的有效“元素”,因此必須考慮這一點。

未插入最后一個元素的位置。 請注意,與教科書數據結構不同,鏈表中的最后一個元素為null ,在這里-當您到達最后一個元素時it.hasNext()將被評估為false,而不會讓您看到此“垃圾”元素。

如果enull ,則indexOf()方法將進行迭代,直到在您傳遞的可迭代對象中找到另一個null元素並返回其索引為止。

我認為您誤解了有關三元運算符的情況

這行:

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

檢查e是否為null ,如果為null ,則它將檢查迭代器的下一個元素是否為null (這有效地停止了迭代操作,以避免NullPointerException ),否則:(如果e 不為null-即它具有其中的一些值),執行比較:

e.equals(it.next())

if (e == null ? it.next() == null : e.equals(it.next())) -這是一個Java三元運算符

it.next() == null是一個null檢查(返回true或false以查看這是否是最后一個元素),如果為true

return it.previousIndex(); 執行

如果e不為null,則

e.equals(it.next())

執行,如果那是真的,

return it.previousIndex(); 執行

這是您要為其索引的元素的索引。 希望我的解釋不會引起混淆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM