使用ListIterator将元素添加到LinkedList中



我需要一些帮助来理解使用 java 中的 ListIterator 将元素添加到 LinkedList 中的底层行为。请查看下面的代码:

在这里,graphQueue最初只有一个节点。并且该节点有三个子节点,它们也是节点。我的逻辑是删除主节点并将其子节点添加到graphQueue中以进行迭代,并将其子节点添加到队列中,依此类推......假设我有vertex 0添加到队列中;它有三个孩子2,3和5。我正在从队列中删除 0,并将 2、3 和 5 添加到队列中。

ListIterator<Node> it = graphQueue.listIterator();
while (it.hasNext())
{
   Node node = it.next();
   it.remove();
   if (node.hasChildren())
   {
      for (Node child : node.getChildren())
      {
         it.add(child);
      }
   }
}

现在的问题是循环在第一次循环后退出,但是如果我再放一个 do while 循环并再次创建 Iterator 对象,它会起作用。请查看下面的代码:

ListIterator<Node> it = graphQueue.listIterator();
do
{
  while (it.hasNext())
  {
     Node node = it.next();
     it.remove();
     if (node.hasChildren())
     {
        for (Node child : node.getChildren())
        {
           it.add(child);
        }
     }
  }
  it = graphQueue.listIterator();
} while(it.hasNext());

我错过了什么吗?谢谢!

根据ListIterator.add()的文档,您添加的元素被放置在迭代器的下一个元素之前。这意味着即使您通过添加元素来修改列表,您当前的迭代器也不会考虑它的遍历。这就是迭代在第一次循环后停止的原因。

在第二种情况下。您有两个嵌套循环,在内部循环的末尾,您可以为列表创建一个新的迭代器。这个迭代器是一个全新的迭代器,它再次从列表的开头开始。因此,这段代码按预期工作。

相关内容

  • 没有找到相关文章

最新更新