这是 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
循环在 e == null
时检查 it.next() == null
?有人可以帮助我了解当输入 e 为空时它是如何完成的吗?
最佳答案
仅当e == null
时,循环才会检查it.next() == null
,这样做是为了避免在计算e.equals(时出现NullPointerException) it.next())
.
如果e != null
,则调用常规e.equals()
方法。
null
是一个有效的“元素”,可以插入到 LinkedList
中,因此必须考虑到这一点。
不插入最后一个元素的位置。请注意,与教科书数据结构不同,其中链接列表中的最后一个元素为 null
,在这里 - 当您到达最后一个元素时 - it.hasNext()
将被评估为 false,而不让您看到这个“垃圾”元素。
关于java - 有人可以帮助解释这个indexOf()实现是如何工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905202/