for循环和增强版的for循环
增强的for循环。
缺点:
对于数组。不能方便的訪问下标值。
对于集合,与使用Interator相比。不能方便的删除集合中的内容(在内部也是调用Interator).
除了简单遍历并读取当中的内容外。不建议使用增强的for循环。
增强for循环和传统for循环的差别:
传统for循环能够完毕对语句运行非常多次,由于能够定义控制循环的增量和条件。
增强的for循环是一种简化的形式,
它必须有遍历的目标,该目标要么是数组。要么是collection单列集合,对数组的遍历假设不过获取数组的元素,能够用
增强的for循环。假设要对数组的角标进行操作,建议使用传统for。
一、遍历数组
语法为:
for (Type value : array) {
expression value;
}
//曾经我们这样写:
void Function ()
{
int[] array = {1,2,5,8,9};
int total = 0;
for (int i = 0; i < array.length; i++)
{
total += array[i];
}
System.out.println(total);
}
//如今我们仅仅需这样写(和以上写法是等价的):
void Function ()
{
int[] array = {1,2,5,8,9};
int total = 0;
for (int n : array)
{
total += n;
}
System.out.println(total);
}
这样的写法的缺点:
显而易见。for/in(for each)循环自己主动控制一次遍历数组中的每个元素。然后将它赋值给一个暂时变量(如上述代码中的int n),然后在循环体中可直接对此暂时变量进行操作。
这样的循环的缺点是:
1. 仅仅能顺次遍历全部元素。无法实现较为复杂的循环。如在某些条件下须要后退到之前遍历过的某个元素;
2. 循环变量(i)不可见,假设想知道当前遍历到数组的第几个元素。仅仅能这样写:
int i = 0;
for (int n : array) {
System.out.println("This " + i + "-th element in the array is " + n);
i++;
}
二、遍历集合
语法为:
for (Type value : Iterable) {
expression value;
}
注意:for/in循环遍历的集合必须是实现Iterable接口的。
//曾经我们这样写:
void someFunction ()
{
List list = new ArrayList();
list.add("Hello ");
list.add("Java ");
list.add("World!");
String s = "";
for (Iterator iter = list.iterator(); iter.hasNext();)
{
String temp= (String) iter.next();
s += temp;
}
System.out.println(s);
}
//如今我们这样写:
void someFunction ()
{
List list = new ArrayList();
list.add("Hello ");
list.add("Java ");
list.add("World!");
String s = "";
for (Object o : list)
{
String temp = (String) o;
s += temp;
}
System.out.println(s);
}
// 假设结合“泛型”,那么写法会更简单,例如以下:
void someFunction ()
{
List list = new ArrayList();
list.add("Hello ");
list.add("Java ");
list.add("World!");
String s = "";
for (String temp : list)
{
s += temp; //省去了对强制类型转换步骤
}
System.out.println(s);
}
//上述代码会被编译器转化为:
void someFunction ()
{
List list = new ArrayList();
list.add("Hello ");
list.add("Java ");
list.add("World!");
String s = "";
for (Iterator iter = list.iterator(); iter.hasNext(); )
{
String temp = iter.next();
s += temp;
}
System.out.println(s);
}
这样的写法的缺点:
尽管对集合进行的for/in操作会被编译器转化为Iterator操作,可是使用for/in时。Iterator是不可见的,所以假设须要调用Iterator.remove()方法。或其它一些操作。 for/in循环就有些力不从心了。
综上所述。Java 5.0中提供的增强的for循环——for/in(for each)循环能让我们的代码更加简洁,让程序猿使用时更加方便,可是也有它的局限性,所以一定要依据实际须要有选择性地使用,不要盲目追求所谓的“新特性”。
for循环和增强版的for循环的更多相关文章
- 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版
<zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...
- hdu 1024(最大和连续子序列增强版)
题意:最大和连续子序列的增强版,要求从一序列中取出若干段,这些段之间不能交叉,使得和最大并输出. 分析:用dp[i][j]表示前j个数取出i段得到的最大值,那么状态转移方程为dp[i][j]=max( ...
- Luogu 2540 斗地主增强版(搜索,动态规划)
Luogu 2540 斗地主增强版(搜索,动态规划) Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游 ...
- 个人永久性免费-Excel催化剂功能第60波-数据有效性验证增强版,补足Excel天生不足
Excel在数据处理.数据分析上已经是公认的最好用的软件之一,其易用性和强大性也吸引无数的初中高级用户每天都在使用Excel.但这些优点的同时,也带出了一些问题,正因为其不同于一般的专业软件,需要专业 ...
- Spring 循环引用(一)一个循环依赖引发的 BUG
Spring 循环引用(一)一个循环依赖引发的 BUG Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring 循环 ...
- 将表里的数据批量生成INSERT语句的存储过程 增强版
将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...
- 最新GHOST XP系统下载旗舰增强版 V2016年
系统来自:系统妈:http://www.xitongma.com 深度技术GHOST xp系统旗舰增强版 V2016年3月 系统概述 深度技术ghost xp系统旗舰增强版集合微软JAVA虚拟机IE插 ...
- 最新深度技术GHOST XP系统旗舰增强版 V2016年
来自系统妈:http://www.xitongma.com 深度技术GHOST xp系统旗舰增强版 V2016年 系统概述 深度技术ghost xp系统旗舰增强版集合微软JAVA虚拟机IE插件,增强浏 ...
- WinNTSetup v3.8.7 正式版绿色增强版
最强系统安装利器:WinNTSetup 现已更新至 v3.8.7 正式版!这次更新修复调整了诸多问题,新版非常好用接近完美!WinNTSetup 现在已经自带BCDBoot 选项,并且完全支持Wind ...
随机推荐
- PHP中getenv()和$_SERVER的区别
PHP中getenv()和$_SERVER的用法区别: getenv 取得系统的环境变量,环境变量的格式为name=value. 语法: string getenv(string varname); ...
- 再见了,DM
在DM奋斗了20个月之后,我终于有机会DM说再见.这我不是我第一次和DM说再见,因此我也不确定这次的再见是再也不见,还是再次见面.但有一点可以确定的是,在接下来相当长的一段时间内,我是没有机会 ...
- Linux使用RPM安装软件
什么是RMP? RPM 的为Redhat Package Manager (RPM软件包管理器)的缩写. RPM包,这种软件包就像windows的EXE安装文件一样,各种文件已经编译好,并打了包,哪个 ...
- 【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)
上次在<[php]利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6>(点击打开链接) 一文中,对于php查询Mysql数据库的model.php写法还不够完 ...
- mysql按某一字段分组取最大(小)值所在行的数据
mysql按某一字段分组取最大(小)值所在行的数据 mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结 ...
- Steve Lin:如何撰写一篇优秀的SIGGRAPH论文
英文原版 PPT下载:http://vdisk.weibo.com/s/z7VKRh2i3R4YO 一篇优秀的论文应该是这样的 广大的研究同仁介绍了这篇论文所包含的重要想法和所获得的结果 在论文中描 ...
- Logback的配置和使用(终极)
1.logback介绍 logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback-classic和logback-acces ...
- log4net 自定义Appender
最近有个需求,使用log4net来记录日志,然后将数据保存到服务器端.一开始打算写一个windows service,定期上传日志. 后来又因为一些场景下不适应,因此直接改为保存内存中,到一定阀值之后 ...
- Git使用sublime_text作用默认编辑器
Git使用的是Vim来作用默认的编辑器,但一直都用不好这个编辑器,所以打算把他换成sublime_text 使用windows默认的记事本 git config --global core.edito ...
- 分布式系统漫谈一 —— Google三驾马车: GFS,mapreduce,Bigtable
分布式系统学习必读文章!!!! 原文:http://blog.sina.com.cn/s/blog_4ed630e801000bi3.html 分布式系统漫谈一 —— Google三驾马车: GFS, ...