传统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循环的情况——平行迭代
需要并行地遍历多个集合,就需要显示的控制迭代器或索引变量,以便所有迭代器或索引变量都可以同步前移。