第46条:for-each循环优先于传统的for循环
2017-08-30 00:00
471 查看
1.代码直观对比
传统for循环
for (Iterator<String> i = list.iterator();i.hasNext();) { doSomething(i.next()); } for (int i = 0; i < list.size(); i++) { doSomething(list.get(i)); }
for-each
for (String str : list) { doSomething(str); }
2.for-each的优势
比传统的for循环:简洁性
有效预防bug
不用担心性能损失
关于有效预防bug以及简洁性,请看以下代码:
// 不简洁,同时易误导致bug for (Iterator<String> i = list.iterator();i.hasNext();) { for (Iterator<String> j = list2.iterator();j.hasNext();) { doSomething(i.next(),j.next()); } } // 简洁 for (String s : list) { for (String s1 : list2) { doSomething(s,s1); } }
3.不能使用for-each情况
(1)过滤如果需要遍历集合,并删除选定的元素,就需要使用显示的迭代器,以便可以调用它的remove方法。
// 正确做法 for (Iterator<String> i = list.iterator();i.hasNext();) { i.next(); // 指向要删除的元素 i.remove(); } // 错误做法 for (int i = 0; i < list.size(); i++) { list.remove(i); } // 错误做法 for (String s : list) { list.remove(s); }
关于删除集合元素参考:Java循环删除集合多个元素的正确打开方式
(2)转换
如果需要遍历所有元素,然后重新设定某些值,那么就需要李彪迭代器或者数组索引,以便设定元素的值。
(3)平行迭代
就是并行地同时遍历多个集合,需要显示地控制迭代器或者索引变量,以便所有迭代器或者索引变量都可以得到同步前移。
相关文章推荐
- Effective Java 学习笔记(第46条:for-each循环优先于传统的for循环)
- 第46条:for-each循环优先于传统的for循环
- Effective Java - 第46条:for-each循环优先于传统的for循环
- Java高效编码:for-each循环优先于传统的for循环
- for-each循环应优先于传统的for循环
- for-each循环优先于传统的for循环
- Effective Java之for-each循环优先于for循环(四十六)
- Java高效编码:for-each循环优先于传统的for循环
- Effective Java 之-----for-each循环优于传统的for循环
- Effective Java(2nd Edition) Item 46 for-each循环优于传统的for循环(译文)
- 第四十六条:for-each循环优先于传统的for循环
- 2015062906 - EffactiveJava笔记 - 第46条 foreach优先传统for循环(2)
- For-each循环优于for循环感悟
- 2015062907 - EffactiveJava笔记 - 第46条 foreach优先传统for循环(3)
- 数组迭代要优先使用for循环而不是for...in循环
- 2015062908 - EffactiveJava笔记 - 第46条 foreach优先传统for循环(4)
- C++新特性之lambda表达式在for_each循环中的使用及for循环新写法
- 从字节码看Java中for-each循环(增强for循环)实现原理
- Effective JavaScript Item 49 对于数组遍历,优先使用for循环,而不是for..in循环
- [Effective JavaScript 笔记]第49条:数组迭代要优先使用for循环而不是for...in循环