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 的下一节点引用
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循环功能更加强大(……
- 普通for循环可以控制自己想要的循环条件
- 可以在特定下标处执行代码
- 使用方式比较灵活
想不出来了emmm.....
对于使用时,只是需要迭代遍历数据就使用加强for循环吧!
java5新特性-加强for循环的更多相关文章
- jdk1.5出现的新特性---->增强for循环
import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; ...
- java5 新特性
1.静态导入方法 package com.java.new_features_jdk5; /** * * 一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:i ...
- 黑马程序员——JAVA基础之JDK1.5新特性高级for循环和可变参数
------- android培训.java培训.期待与您交流! ---------- 高级for循环 格式: for(数据类型 变量名 : 被遍历的集合(Collection)或者数组) { ...
- Java5新特性对数组的支持
增强for循环 → for-each for (参数类型参数名 : 数组名) { 代码块 } Eg: package reviewDemo; public class Demo6 { public s ...
- Java5新特性之枚举
1. 概念 首先,枚举并非一种新技术,而是一种基础数据类型.它隶属于两种基础类型中的值类型,例如以下: 2. 为什么要有枚举 枚举在真正的开发中是非经常常使用的,它的作用非常easy也非常纯粹:它 ...
- Hi java新特性
java新特性 1995.5.23 java语言 1996 jdk1.0 250个类在API 主要用在桌面型应用程序1997 jdk1.1 500 图形用户界面编程1998 jdk1.2 2300 J ...
- 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 ...
- 从零开始一起学习SLAM | C++新特性要不要学?
LAM,C++编程是必备技能.不过,大家在学校里学习的书本一般比较老,主要还是C++98那些老一套. 本文所谓的C++新特性是指C++11及其以后的C++14.C++17增加的新关键字和新语法特性.其 ...
- Java5的新特性
原文出处:xixicat 序 这是Java语言特性系列的第一篇,从java5的新特性开始讲起.初衷就是可以方便的查看语言的演进历史. 特性列表 泛型 枚举 装箱拆箱 变长参数 注解 foreach循环 ...
随机推荐
- MIT Molecular Biology 笔记2 DNA的突变和修复
视频 https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...
- day24(JAVAWEB上传与下载)
javaWeb上传与下载 上传: 上传方式: jspSmartUpload :应用在jsp上的文件上传与下载组件. FileUpload :用用在jaava环境上的上传的功能 ...
- java基础-day29
第06天 MySQL数据库 今日内容介绍 u MySQL单表查询 u SQL约束 u 多表操作 第1章 MySQL单表查询 1.1 SQL单表查询--排序 1.1.1 排序格式 通过order ...
- URAL1099. Work Scheduling(一般图匹配带花树开花算法)
1099. Work Scheduling Time limit: 0.5 second Memory limit: 64 MB There is certain amount of night gu ...
- All Start Here.
缘由 本博客是为天大软院 2016 级研一课程"现代软件工程"的课程设计而开设.同时借此机会和同学们进行技术交流与分享. 我们小组共有四位成员: 陈岩岩 2016218020 刘莞 ...
- python_列表、元组、字典、集合对比
列表.元组.字典.集合 列表.元组.字典.集合对比 比较项 列表 元组 字典 集合 类型名称 list tuple dict set 定界符 [] () {} {} 是否可变 是 否 是 是 是否有序 ...
- 1.Django入门
MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model,主要用于对数据库层的封装 v表示 ...
- C#调用haskell遭遇Attempted to read or write protected memory
1. Haskell的代码如下: 上面的代码中readMarkdown与writeHtmlString是pandoc中的函数,newString的作用是将String转换为IO CString. 2. ...
- SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)
二.完整的锁兼容性矩阵(见下图) 对上图的是代码说明:见下图. 三.下表列出了数据库引擎可以锁定的资源. 名称 资源 缩写 编码 呈现锁定时,描述该资源的方式 说明 数据行 RID RID 9 文件编 ...
- C# Winform右下角弹窗方式
[方法一] 第一步:winform项目创建完成后,添加一个窗口,命名为:Messages .(加上最开始的Form1,一共为两个窗口),双击主窗口进入后台代码 . 第二步:在Messages 窗口中添 ...