有幾次我遇到過for-each循環會導致問題的情況,包括異常和崩潰,而for(it=list.iterator;it.hasNext();)
工作時沒有任何問題。這包括修改集合(我知道不應該爲每個集合而發生,但不知道爲什麼)以及其他情況下克隆的東西。不能回想任何具體的例子atm我只是想到了它。for-each和for loops
是不是for-每個只是我指出的第二個循環類型的快捷方式?有人能解釋一下究竟有什麼區別嗎?
有幾次我遇到過for-each循環會導致問題的情況,包括異常和崩潰,而for(it=list.iterator;it.hasNext();)
工作時沒有任何問題。這包括修改集合(我知道不應該爲每個集合而發生,但不知道爲什麼)以及其他情況下克隆的東西。不能回想任何具體的例子atm我只是想到了它。for-each和for loops
是不是for-每個只是我指出的第二個循環類型的快捷方式?有人能解釋一下究竟有什麼區別嗎?
for-each
只是java 1.5中引入的一個語法糖。它使用在場景後面從Iterable
獲得的迭代器。
你提到的唯一一個合理的區別是迭代過程中的集合修改。是的,這是不可能的。使用Iterator
在迭代過程中不能修改集合。嘗試導致ConcurrentModificationException
。這對兩種情況都是相關的(迭代器的顯式和隱式使用)。
唯一的例外是使用Iterator.remove()
(支持時)。在這種情況下,迭代器不會拋出異常。
原因很明顯。迭代器不能迭代在迭代期間被更改的集合,除非它知道變化並且可以重新排列它自己。這是當您使用Iterator.remove()
時發生的情況。
問題是當你在foreach
循環你remove
一個元素。使用迭代器時,您有一個remove
方法。在使用foreach
時,您無法直接訪問基礎迭代器,也無法調用其remove
方法。
否則它是一樣的。 Foreach不會導致更多的問題或崩潰。你不能刪除一個元素。
http://stackoverflow.com/questions/7332190/using-iterator-interface-or-for-each-statement-in-java/7332496#7332496 –