傳統for循環的缺點
上面這些做法都比while
循環更好。
迭代器和索引變量都會造成一些混亂。
for-each循環的優勢
for-each循環完全隱藏了迭代器或索引變量,避免了混亂和出錯的可能性。
:
可以讀作“在......里面”for-each循環不會有性能損失。在某些情況下,比起普通的for循環,它還稍有些性能優勢,它對數組索引的邊界值只計算一次。
for-each循環和for循環在多個集合迭代時的對比
在對多個集合進行嵌套迭代時,for-each循環相對于傳統的for循環優勢更明顯。
對外部的集合suits
調用了太多次的next
方法。
下面這個例子不會報錯:
如何修復bug:
必須在外部循環的作用域中添加一個變量來保存外部元素:
for-each循環沒有這個問題:
for-each循環可以遍歷集合、數組和任何實現Iterable
接口的對象。
for-each可循環在簡潔性和預防bug方面有著傳統的for循環無法比擬的優勢,并且沒有性能損失。
無法使用for-each循環的情況——過濾
需要遍歷集合,并刪除選定的元素,就需要使用顯示的迭代器,以便可以調用它的remove
方法。
無法使用for-each循環的情況——轉換
需要遍歷列表或數組,并取代它部分或全部的元素值,就需要列表迭代器或數組索引,以便設定元素的值。
無法使用for-each循環的情況——平行迭代
需要并行地遍歷多個集合,就需要顯示的控制迭代器或索引變量,以便所有迭代器或索引變量都可以同步前移。