java5新特性-加强for循环
本文目标是加强for循环和普通for循环的比较。阅读本文大概3-5分钟
刚开始学习编程语言的时候接触了三种循环方式
1. for 常用
2. while 较常用
3 do ... while 不常用
一般的for循环格式
for(int i=0; i <10;i++){ doSomething(); }
for(init ; condition ; increment),共有三个代码块
init 初始化区域
condition 设置判断条件
increment做完循环体内容后执行的代码块
现在看下for循环和加强for循环做同样一件事有何区别(使用集合Collection)
例如:两颗骰子,打印所有可能出现的点数。
数据
Integer []face = {1,2,3,4,5,6}; Integer []face2 = {1,2,3,4,5,6,7};//额外多加了一个7,是为了验证容易出现的错误。 //将数组转换成集合,Arrays.asList方法只能用对象数组,不能用基本类型数组,会出现逻辑性错误,即集合中只有一个元素,face自身 Collection<Integer> dot1 = Arrays.asList(face); Collection<Integer> dot2 = Arrays.asList(face2);
1. 正常的for循环遍历集合方法。
隐含错误的代码
// 循环打印出所有的可能。 for (Iterator<Integer> i = dot1.iterator(); i.hasNext();) { // Integer tempI = i.next(); for (Iterator<Integer> j = dot2.iterator(); j.hasNext();) { System.out.println("(" + i.next() + "," + j.next() + ")"); } }
不可以在内层循环中调用外层i元素的next()方法
代码中。i.next()方法会将当前游标移到下一节点。即current=next; current.next = next.next
因为,dot2的元素比dot1的元素多。当循环6次后,i.next()没有下一个元素,就会报NoSuchElementException异常
正确的代码,使用临时变量保存 i 的下一节点引用
1 Integer []face = {1,2,3,4,5,6}; 2 Integer []face2 = {1,2,3,4,5,6,7};//额外多加了一个7,是为了验证容易出现的错误。 3 //将数组转换成集合 4 Collection<Integer> dot1 = Arrays.asList(face); 5 Collection<Integer> dot2 = Arrays.asList(face2); 6 //循环打印出所有的可能。 7 for(Iterator<Integer> i =dot1.iterator();i.hasNext();) { 8 Integer tempI = i.next(); 9 for(Iterator<Integer> j =dot2.iterator();j.hasNext();) { 10 System.out.println("("+tempI+"数据"+j.next()+")"); 11 } 12 }
执行结果,为了更好截图,代码做了换行改动
2. 加强for循环
代码比较简洁
for(Integer i:dot1) { for(Integer j : dot2) { System.out.print("("+i+","+j+")"); } }
运行结果和上面也是一样的
嵌套循环遍历实现了Iterator接口的类时,代码跟普通for循环有所不同
直接避免的内层循环中i.next造成异常的问题,而且还不用自己创建临时变量
加强for循环好处:简洁性,避免bug
是iterator迭代方式的一种替换。
缺点:
遍历部分想要的内容比较麻烦,比如想要获取第6位到第9位的下标的数据,也需要引入额外变量
获取当前元素的索引值麻烦。
只能遍历实现了Iterator接口的对象或数组
相对于上面的来说,好像普通for循环功能更加强大(……
- 普通for循环可以控制自己想要的循环条件
- 可以在特定下标处执行代码
- 使用方式比较灵活
想不出来了emmm.....
对于使用时,只是需要迭代遍历数据就使用加强for循环吧!
出处:https://www.cnblogs.com/gne-hwz/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任