这是一个简单的实现indexOf()在LinkedListOracle的网站.我对这个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;
}
Run Code Online (Sandbox Code Playgroud)
因此,ListIterator对象在列表的头部创建.for循环继续,直到迭代器到达列表的末尾,if循环检查是否找到目标对象.我不明白的部分是,为什么if循环检查it.next() == null何时e == null?当输入e为空时,有人可以帮助我了解它是如何完成的吗?
循环检查是否it.next() == null仅在执行e == null此操作时以避免在评估时出现NullPointerException e.equals(it.next()).
if e != null,然后e.equals()调用常规方法.
null是一个可以插入到a的有效"元素" LinkedList,因此必须将其考虑在内.
未插入最后一个元素的位置.请注意,与链接列表中最后一个元素所在的教科书数据结构不同null,在这里 - 当你到达最后一个元素时 - it.hasNext()将被评估为false,而不会让你看到这个"垃圾"元素.
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |