2016-04-23 1680 views
0

如何重置將迭代器重置爲其第一個元素?如何重置java中的迭代器?

下面,我有一個Sigma迭代器。當while循環完成時,如何將迭代器重置爲其第一個元素?

Iterator it = Sigma.iterator(); 

while(it.hasNext()){ 
    letter= (String) it.next(); 
    System.out.println(letter); 
} 
+0

我認爲你不應該。要重置,只需從底層數據結構中獲取新的迭代器即可。 'Iterator'是一個接口,只提供3種方法,'hasNext','next'和'remove'。 –

+0

嘿,你真的沒有通過從底層數據結構請求新的迭代器來解決問題,你只是在這種情況下逃避問題,如果底層數據結構自上次獲取後發生了變化,會發生什麼?迭代器? –

+0

和OP,你爲什麼需要重置迭代器?再次迭代它?只是做你想做的單一循環,爲什麼分裂它在2個循環? –

回答

0

我還沒有做很多迭代器的工作,但我猜你可以設置迭代器到它的原始狀態。

Iterator it = Sigma.iterator(); 

while(it.hasNext()){ 
    letter= (String) it.next(); 
    System.out.println(letter); 
} 

it = Sigma.iterator(); 
+2

這不是將迭代器設置爲其原始狀態,即從西格瑪請求新的迭代器,如果西格馬值不改變其okey,但它已經改變了什麼? (新添加或從Sigma中刪除的值),您將獲得具有不同值的新迭代器。 –

+0

@LaVloZMerrill這是一個很好的觀點。我想唯一的解決辦法是在開始時創建Sigma的深層副本,然後將其用於迭代。 –

+0

@RayondKelly有很多解決這個問題的方法,你可以製作一個可重寫的迭代器,它接受一個迭代器,這個可復位的迭代器將首先遍歷所提供的迭代器,將每個對象迭代應用到一個內部數組,然後當它重新設置時,第一種(低效的方式),另一種簡單的方法,只要確保底層的數據結構不會改變,在收集的情況下,你可以通過Collections.unmodifiableXXX方法裝飾類來強制這種行爲,當然也可能存在其他解決方案: ) –

1

您不需要重置它,也不能這樣做。收藏品不像您需要倒帶的盒式磁帶。您可以簡單地放棄舊的迭代器。

每次您再次致電Sigma.iterator()時,它將返回一個新的迭代器,它將在集合開始時開始迭代。