如何重置將迭代器重置爲其第一個元素?如何重置java中的迭代器?
下面,我有一個Sigma
迭代器。當while
循環完成時,如何將迭代器重置爲其第一個元素?
Iterator it = Sigma.iterator();
while(it.hasNext()){
letter= (String) it.next();
System.out.println(letter);
}
如何重置將迭代器重置爲其第一個元素?如何重置java中的迭代器?
下面,我有一個Sigma
迭代器。當while
循環完成時,如何將迭代器重置爲其第一個元素?
Iterator it = Sigma.iterator();
while(it.hasNext()){
letter= (String) it.next();
System.out.println(letter);
}
我還沒有做很多迭代器的工作,但我猜你可以設置迭代器到它的原始狀態。
Iterator it = Sigma.iterator();
while(it.hasNext()){
letter= (String) it.next();
System.out.println(letter);
}
it = Sigma.iterator();
這不是將迭代器設置爲其原始狀態,即從西格瑪請求新的迭代器,如果西格馬值不改變其okey,但它已經改變了什麼? (新添加或從Sigma中刪除的值),您將獲得具有不同值的新迭代器。 –
@LaVloZMerrill這是一個很好的觀點。我想唯一的解決辦法是在開始時創建Sigma的深層副本,然後將其用於迭代。 –
@RayondKelly有很多解決這個問題的方法,你可以製作一個可重寫的迭代器,它接受一個迭代器,這個可復位的迭代器將首先遍歷所提供的迭代器,將每個對象迭代應用到一個內部數組,然後當它重新設置時,第一種(低效的方式),另一種簡單的方法,只要確保底層的數據結構不會改變,在收集的情況下,你可以通過Collections.unmodifiableXXX方法裝飾類來強制這種行爲,當然也可能存在其他解決方案: ) –
您不需要重置它,也不能這樣做。收藏品不像您需要倒帶的盒式磁帶。您可以簡單地放棄舊的迭代器。
每次您再次致電Sigma.iterator()
時,它將返回一個新的迭代器,它將在集合開始時開始迭代。
我認爲你不應該。要重置,只需從底層數據結構中獲取新的迭代器即可。 'Iterator'是一個接口,只提供3種方法,'hasNext','next'和'remove'。 –
嘿,你真的沒有通過從底層數據結構請求新的迭代器來解決問題,你只是在這種情況下逃避問題,如果底層數據結構自上次獲取後發生了變化,會發生什麼?迭代器? –
和OP,你爲什麼需要重置迭代器?再次迭代它?只是做你想做的單一循環,爲什麼分裂它在2個循環? –