高效Java第四十六条for-each循环优于传统的for循环

传统for循环的缺点

高效Java第四十六条for-each循环优于传统的for循环_第1张图片

上面这些做法都比while循环更好。
迭代器和索引变量都会造成一些混乱。

for-each循环的优势

for-each循环完全隐藏了迭代器或索引变量,避免了混乱和出错的可能性。


:可以读作“在......里面”
for-each循环不会有性能损失。在某些情况下,比起普通的for循环,它还稍有些性能优势,它对数组索引的边界值只计算一次。

for-each循环和for循环在多个集合迭代时的对比

在对多个集合进行嵌套迭代时,for-each循环相对于传统的for循环优势更明显。

高效Java第四十六条for-each循环优于传统的for循环_第2张图片

对外部的集合suits调用了太多次的next方法。
下面这个例子不会报错:

高效Java第四十六条for-each循环优于传统的for循环_第3张图片

如何修复bug:
必须在外部循环的作用域中添加一个变量来保存外部元素:

高效Java第四十六条for-each循环优于传统的for循环_第4张图片

for-each循环没有这个问题:

for-each循环可以遍历集合、数组和任何实现Iterable接口的对象。

高效Java第四十六条for-each循环优于传统的for循环_第5张图片

for-each可循环在简洁性和预防bug方面有着传统的for循环无法比拟的优势,并且没有性能损失。

无法使用for-each循环的情况——过滤

需要遍历集合,并删除选定的元素,就需要使用显示的迭代器,以便可以调用它的remove方法。

无法使用for-each循环的情况——转换

需要遍历列表或数组,并取代它部分或全部的元素值,就需要列表迭代器或数组索引,以便设定元素的值。

无法使用for-each循环的情况——平行迭代

需要并行地遍历多个集合,就需要显示的控制迭代器或索引变量,以便所有迭代器或索引变量都可以同步前移。

你可能感兴趣的:(高效Java第四十六条for-each循环优于传统的for循环)