本文目标是加强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 的下一节点引用

         Integer []face = {1,2,3,4,5,6};
Integer []face2 = {1,2,3,4,5,6,7};//额外多加了一个7,是为了验证容易出现的错误。
//将数组转换成集合
Collection<Integer> dot1 = Arrays.asList(face);
Collection<Integer> dot2 = Arrays.asList(face2);
//循环打印出所有的可能。
for(Iterator<Integer> i =dot1.iterator();i.hasNext();) {
Integer tempI = i.next();
for(Iterator<Integer> j =dot2.iterator();j.hasNext();) {
System.out.println("("+tempI+"数据"+j.next()+")");
}
}

执行结果,为了更好截图,代码做了换行改动

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循环功能更加强大(……

  1. 普通for循环可以控制自己想要的循环条件
  2. 可以在特定下标处执行代码
  3. 使用方式比较灵活

想不出来了emmm.....

对于使用时,只是需要迭代遍历数据就使用加强for循环吧!

java5新特性-加强for循环的更多相关文章

  1. jdk1.5出现的新特性---->增强for循环

    import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; ...

  2. java5 新特性

    1.静态导入方法 package com.java.new_features_jdk5; /** * * 一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:i ...

  3. 黑马程序员——JAVA基础之JDK1.5新特性高级for循环和可变参数

    ------- android培训.java培训.期待与您交流! ---------- 高级for循环   格式: for(数据类型 变量名 : 被遍历的集合(Collection)或者数组) {   ...

  4. Java5新特性对数组的支持

    增强for循环 → for-each for (参数类型参数名 : 数组名) { 代码块 } Eg: package reviewDemo; public class Demo6 { public s ...

  5. Java5新特性之枚举

    1.  概念 首先,枚举并非一种新技术,而是一种基础数据类型.它隶属于两种基础类型中的值类型,例如以下: 2.  为什么要有枚举 枚举在真正的开发中是非经常常使用的,它的作用非常easy也非常纯粹:它 ...

  6. Hi java新特性

    java新特性 1995.5.23 java语言 1996 jdk1.0 250个类在API 主要用在桌面型应用程序1997 jdk1.1 500 图形用户界面编程1998 jdk1.2 2300 J ...

  7. JavaSE: Java 5 新特性

    Java5新特性 1.Java 语言 1.1 Generics 1.2 foreach 1.3 自动拆箱装箱 1.4 enum 1.5 可变参数 varargs 1.6 static import 1 ...

  8. 从零开始一起学习SLAM | C++新特性要不要学?

    LAM,C++编程是必备技能.不过,大家在学校里学习的书本一般比较老,主要还是C++98那些老一套. 本文所谓的C++新特性是指C++11及其以后的C++14.C++17增加的新关键字和新语法特性.其 ...

  9. Java5的新特性

    原文出处:xixicat 序 这是Java语言特性系列的第一篇,从java5的新特性开始讲起.初衷就是可以方便的查看语言的演进历史. 特性列表 泛型 枚举 装箱拆箱 变长参数 注解 foreach循环 ...

随机推荐

  1. wc2016鏖战表达式(可持久treap)

    由运算符有优先级可以想到先算优先级小的,然后两边递归,但符号比较少,有大量相同的,同级之间怎么办呢?因为运算符满足结合律,同级之间选一个然后两边递归也是没问题的,然后我们想到用fhqtreap进行维护 ...

  2. spring整合redis之hello

    1.pom.xml文件 <dependencies> <!-- spring核心包 --> <dependency> <groupId>org.spri ...

  3. hdu 4455 Substrings(计数)

    题目链接:hdu 4455 Substrings 题目大意:给出n,然后是n个数a[1] ~ a[n], 然后是q次询问,每次询问给出w, 将数列a[i]分成若干个连续且元素数量为w的集合,计算每个集 ...

  4. Java学习--数组的定义和使用

    1. 数组分配了空间,未赋值 public class ArrayDemo01{ public static void main(String args[]){ int score[] = null ...

  5. 使用EF操作Oracle数据库小计

    1.建表 CREATE TABLE item.ORDERS( ORDERID ) CONSTRAINT PK_ORDERS PRIMARY KEY, ORDERNO ), STOREID ), STO ...

  6. 重写TreeView,多层级节点下批量显示图片,图片支持缩略图和文件名列表切换,支持调用者动态匹配选中,支持外界拖入图片并添加到对应节点下

    1.先看下整体效果 2.前端代码 <UserControl x:Class="iPIS.UI.Base.Tree.ImageTreeControl" xmlns=" ...

  7. 真实项目中VS2015中自建T4模板生成文件的使用

    有可能许多小伙伴们发现,vs2015和2012的自带T4模板中的.tt文件改变非常之多,如果仅仅copyEF系统自己生成的模板文件,那可累了.以下是我自己整理的在2012和2015中都可以试用的代码. ...

  8. 【计算机网络】 DNS学习笔记 (>﹏<)

    参考书籍 <计算机网络-自顶向下>  作者 James F. Kurose   DNS的作用   DNS是因特网的目录服务 DNS是因特网的目录服务,它提供了主机名到IP地址映射的查询服务 ...

  9. 基于tkinter的九型人格测试系统介绍

    基于tkinter的九型人格测试系统介绍 一.程序代码地址,GitHub 二.程序介绍 1.login.py 登录界面: 注册界面: 2.mainWindow.py 登录成功之后的界面: 3.doTe ...

  10. js 标准二维数组变一维数组的方法

    问题:[[0, 1], [2, 3], [4, 5]] -> [0, 1, 2, 3, 4, 5]? 方法一 利用es5的arr.reduce(callback[, initialValue]) ...