我需要在添加元素時到一個LinkedList在Java中使用的ListIterator瞭解底層的行爲的一些幫助。 請看下面的代碼:添加元素融入一個LinkedList使用的ListIterator
在這裏,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循環迴路和創建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());
我錯過了什麼嗎?謝謝!
文檔中說 - 「的元素,將在明年(如果有的話)所返回元素前立即插入,並會由以前的(),如果任何返回的元素之後。」在我的情況下,列表中沒有元素,因爲我在add()之前執行刪除操作,所以你能更清楚地解釋我會發生什麼? –
此外,我添加了三個元素,根據定義,至少指針應該指向我添加的第二個元素。啊!還是說所有三個節點都是在下一個指針之前添加的?如果是這樣,我應該怎麼做才能確保指針指向第一個元素? –
是的所有三個節點剛添加在下一個指針之前。無論您添加的節點數量多少,迭代器的下一個節點都是相同的。我剛剛給你解釋了爲什麼你的兩段代碼的行爲有所不同。我想這就是你問的。但是對於我來說這個代碼的最終目標並不明確。你的目標是遍歷樹的所有節點嗎?如果是這種情況,那麼您可以採用其他方法,例如遞歸樹遍歷方法。 – dishan