Effective Java之for-each循环优先于for循环(四十六)
2018-01-07 19:57
429 查看
for循环的缺点:
对于for循环遍历,我们很容易出现这样的一些低级错误:
对于数组
我们有时候会写出像这样一时短路写出来的代码~原因很简单,i出现了三次,每个i我们都要小心!
但是for-each循环就不同了,全程都没有出现 i 好吧,何来错误?
对于集合
看,i是外层循环,但是在内循环中不断i.next(),导致了错误。这也是疏忽导致的,我们需要在外层循环中记录下i.next()
像这样
来看for-each循环:
实在是太优雅了!!
但是在for-each循环有两个小缺点,相信大家在编程的时候也类词的情况:
for-each得不到索引,这是个很尴尬的问题,导致所有需要索引的操作的行不通。比如书中提到的转换,平行迭代。
for-each无法删除集合中的元素。原因很简单,迭代器是删除元素的御用神器啊啊啊
总结:能用for-each就用它,又容易写有整洁,除非要删除元素或者用到索引才用普通for。
对于for循环遍历,我们很容易出现这样的一些低级错误:
对于数组
for(int i = 0 ; i >100 ; i++) for(int i = 100 ; i >=0 ; i++)
我们有时候会写出像这样一时短路写出来的代码~原因很简单,i出现了三次,每个i我们都要小心!
但是for-each循环就不同了,全程都没有出现 i 好吧,何来错误?
对于集合
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()); } }
看,i是外层循环,但是在内循环中不断i.next(),导致了错误。这也是疏忽导致的,我们需要在外层循环中记录下i.next()
像这样
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循环有两个小缺点,相信大家在编程的时候也类词的情况:
for-each得不到索引,这是个很尴尬的问题,导致所有需要索引的操作的行不通。比如书中提到的转换,平行迭代。
for-each无法删除集合中的元素。原因很简单,迭代器是删除元素的御用神器啊啊啊
总结:能用for-each就用它,又容易写有整洁,除非要删除元素或者用到索引才用普通for。
相关文章推荐
- Effective Java 学习笔记(第46条:for-each循环优先于传统的for循环)
- Java高效编码:for-each循环优先于传统的for循环
- Effective Java 之-----for-each循环优于传统的for循环
- Effective Java(2nd Edition) Item 46 for-each循环优于传统的for循环(译文)
- 从字节码看Java中for-each循环(增强for循环)实现原理
- Effective JavaScript Item 49 对于数组遍历,优先使用for循环,而不是for..in循环
- [Effective JavaScript 笔记]第49条:数组迭代要优先使用for循环而不是for...in循环
- Effective JavaScript Item 49 对于数组遍历,优先使用for循环,而不是for..in循环
- 第46条:for-each循环优先于传统的for循环
- 第46条:for-each循环优先于传统的for循环
- Java高效编码:for-each循环优先于传统的for循环
- Effective Java - 第46条:for-each循环优先于传统的for循环
- for-each循环应优先于传统的for循环
- for-each循环优先于传统的for循环
- Java如何跳出双重for循环和单重for循环
- 黑马程序员-Java的集合类(泛型、可变参数、for-each循环和静态导入)
- JAVA for each 循环
- Java for-each循环
- Java如何跳出双重for循环和单重for循环
- 详解JAVA中的for-each循环与迭代