2010-09-30 57 views
8

如果我設立了myList中的迭代器:如果你在同一個集合上調用兩次相同的迭代器會發生什麼?

Iterator iter = myList.iterator(); 
while(iter.hasNext()) 
{ 
    MyObj myObj = (MyObj)iter.next(); 
    doPrint(myObj.toString()); 
} 

而且我把它稱爲第二次:

while(iter.hasNext()) 
{ 
    MyObj myObj = (MyObj)iter.next(); 
    doPrint(myObj.toString()); 
} 

將它回到集合開始第二次我把它叫做?

+6

爲什麼不試試自己嗎? – Fortega 2010-09-30 14:33:04

+0

java.util.ConcurrentModificationException – 2017-07-21 21:05:06

回答

8

Iterator接口只提供了三個方法:

  • hasNext()
  • 下一個( )
  • 刪除()

所以沒有辦法告訴迭代器到「復位」,「從重啓開始「或」返回「。一旦它坐落在底層序列的最後一個元素上,它就完成了它的工作,並且不需要保留參考。 Whisper R.I.P並讓它符合Big GC。

31

iter.hasNext()第二個循環會立即返回false,所以循環內的代碼將不會被執行。

如果重新創建一個迭代器,但是(由list.iterator()),迭代將從頭開始重新啓動。

+0

1,爲了清楚起見在第二呼叫的結果來.iterator()。 – 2013-01-18 15:00:34

3

第二部分將不被執行,因爲iter.hasNext()返回false ...

相關問題