本文目标是加强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循环 ...
随机推荐
-
关于bootstrap和响应式布局
bootstrap导入 首先需要安装好插件 然后就是在代码器写导入代码 代码如下 <html lang="zh-CN"> <head> <meta c ...
-
Memcache服务器端参数说明
/usr/local/webserver/memcached/bin/memcached -d -m 512 -u root -l 192.168.0.1 -p 11211 -c 512 -P /us ...
-
获取和设置localStorage
东钿金融服务平台 用户第一次访问页面出现,引导步骤,起初一直使用cookie,但是cookie一直不稳定 今天老大说改用localStorage 于是乎百度,查了一篇博客 http://www.cnb ...
-
C语言 数组名不是指针
今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见 ...
-
C# .Net计算函数执行的时间
C#计算函数执行的时间 protected void StopwatchTest() { System.Diagnostics.Stopwatch stopwatch = new System.Dia ...
-
Python3 图像识别(二)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 以图搜图的使用已经非常广泛了,我现在来介绍一下简单的以图搜图的相关算法及其实践. 一.感知hash算法 感知哈希算 ...
-
VIM选项配置说明
选项配置说明 选项书写格式 选项说明 :se[t] 显示所有被改动的选项 :se[t] all 显示所有非 termcap 选项 :se[t] termcap 显示所有 termcap 选项 :se[ ...
-
Exdata cell 节点配置时遇到的一个问题
问题描写叙述: [celladmin@vrh4 ~]$ cellcli CellCLI: Release 11.2.3.2.0 - Production on Sat Jun 14 09:11:08 ...
-
26 python 并发编程之多进程理论
一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的任务,写书的任 ...
-
hibernate学习三 精解Hibernate之核心文件
一 hibernate.cfg.xml详解 1 JDBC连接: 2 配置C3P0连接池: 3 配置JNDI数据源: 4 可选的配置属性: 5 hibernate二级缓存属性 6 hibernate事务 ...