[英]Can someone help to explain how the lambda expression works in this context?
[英]could someone help explain how this indexOf() implementation works?
這是Oracle網站上LinkedList
中indexOf()
的示例實現。 我對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,而不會讓您看到此“垃圾”元素。
如果e
為null
,則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.