java - 有人可以帮助解释这个indexOf()实现是如何工作的吗?

标签 java linked-list

这是 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 循环在 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/

相关文章:

java - 无法从静态上下文引用非静态变量文件路径

java - Android - 我无法从 SQLite 数据库更新数据

python - 如何创建指向正在定义的结构的指针?

c - 如何释放c中双向链表程序的内存

java - 在单个文本文件中进行多次搜索

java - 如何在JPanel上设置背景图片并更改图片

java.lang.IllegalArgumentException : Illegal character in query at index 59 异常

java - 为什么我的序列号系统重复数字 001?

python - 为什么我们要为链表中的头节点创建不同的类?

java - 协助仅使用节点创建 java 链表