【发布时间】:2016-03-03 03:32:31
【问题描述】:
在使用 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);
}
}
}
现在的问题是循环在第一个循环之后退出,但是如果我在这个 while 循环周围再放一个 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());
我错过了什么吗?谢谢!
【问题讨论】:
标签: java collections linked-list listiterator