如果我使用链接列表迭代器查找元素,调用remove()是否会使迭代器再次遍历列表?代码如下

//The list is LinkedList<String> list; and has already been populated

Iterator itar = list.iterator();

 while(itar.hasNext())
{
           if(itar.next().equalsIgnoreCase("Foo"))
               itar.remove();
}

最佳答案

Java中的LinkedList是一个双向链接列表,这意味着每个节点都引用了列表中的下一个和上一个。

当迭代器执行删除操作时,它具有对当前节点的引用,并在下一个和上一个中简单地重新分配了引用(如果需要,为列表本身更新头和尾引用)。

所以不行;没有执行其他迭代。

另外值得注意的是,如今Java是开源的。您可以使用迭代器的LinkedList调用here的代码查看remove() here的源。

编辑添加:如评论中所述,用于单链接列表实现的迭代器可以轻松跟踪其迭代的上一个节点并执行相同的操作。

09-29 21:13