第46条:for-each循环优先于传统的for循环
2016-08-09 23:21
513 查看
for-each循环通过完全隐藏迭代器或者索引变量,避免混乱和出错的可能,适用于集合和数组和任何实现Iterable接口的对象。
使用传统for循环,容易出错:
期望打印出36个组合,实际上只打印出6个组合
修正:
使用嵌套for-each循环更简洁:
无法使用for-each循环的情况:
1.过滤,需要遍历集合并删除选定的元素,需要显式的迭代器,以便调用它的remove方法
2.转换,需要遍历列表或者数组,并取代它部分或者全部元素值,需要列表迭代器或者数组索引,以便设定元素的值
3.平行迭代,并行地遍历多个集合,需要显式地控制迭代器或者索引变量,以便所有迭代器和索引变量都可以得到同步前移(像上述第一个代码 块那样)
使用传统for循环,容易出错:
enum Face { ONE, TWO, THREE, FOUR, FIVE, SIX } Collection<Face> faces = Arrays.asList(Face.values()); for(Iterator<Face> i = faces.iterator(); i.hasNext();) for(Iterator<Face> j = faces.iterator(); j.hasNext();) System.out.println(i.next() + " " + j.next());
期望打印出36个组合,实际上只打印出6个组合
修正:
enum Face { ONE, TWO, THREE, FOUR, FIVE, SIX } Collection<Face> faces = Arrays.asList(Face.values()); for(Iterator<Face> i = faces.iterator(); i.hasNext();) Face face = i.next(); for(Iterator<Face> j = faces.iterator(); j.hasNext();) System.out.println(face + " " + j.next());
使用嵌套for-each循环更简洁:
for(Face face1 : faces) for(Face face2 : faces) System.out.println(face1 + " " + face2);
无法使用for-each循环的情况:
1.过滤,需要遍历集合并删除选定的元素,需要显式的迭代器,以便调用它的remove方法
2.转换,需要遍历列表或者数组,并取代它部分或者全部元素值,需要列表迭代器或者数组索引,以便设定元素的值
3.平行迭代,并行地遍历多个集合,需要显式地控制迭代器或者索引变量,以便所有迭代器和索引变量都可以得到同步前移(像上述第一个代码 块那样)
相关文章推荐
- Effective Java 学习笔记(第46条:for-each循环优先于传统的for循环)
- Effective Java - 第46条:for-each循环优先于传统的for循环
- 第46条:for-each循环优先于传统的for循环
- for-each循环应优先于传统的for循环
- for-each循环优先于传统的for循环
- Java高效编码:for-each循环优先于传统的for循环
- Effective Java 之-----for-each循环优于传统的for循环
- Effective Java(2nd Edition) Item 46 for-each循环优于传统的for循环(译文)
- 第四十六条:for-each循环优先于传统的for循环
- Effective Java之for-each循环优先于for循环(四十六)
- Java高效编码:for-each循环优先于传统的for循环
- For-each循环优于for循环感悟
- 数组迭代要优先使用for循环而不是for...in循环
- Effective JavaScript Item 49 对于数组遍历,优先使用for循环,而不是for..in循环
- [Effective JavaScript 笔记]第49条:数组迭代要优先使用for循环而不是for...in循环
- C++新特性之lambda表达式在for_each循环中的使用及for循环新写法
- Effective JavaScript Item 49 对于数组遍历,优先使用for循环,而不是for..in循环
- 从字节码看Java中for-each循环(增强for循环)实现原理
- 2015062905 - EffactiveJava笔记 - 第46条 foreach优先传统for循环(1)
- 2015062906 - EffactiveJava笔记 - 第46条 foreach优先传统for循环(2)