Effective Java 第46条for-each循环优先于传统for循环

问题:

使用for循环来遍历集合或者是数组可以借助迭代器和索引变量。但是,如果出现循环嵌套的时候很容易引起混乱。

例如:

  public static void testfor() {
String Suit[] = {"CLUB","DIAMOND","HEART","SPADE"};
String Rank[] = {"ACE","DEUCE","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT",
"NINE","TEN","JACK","QUEEN","KING"}; Collection<String> suits = Arrays.asList(Suit);
Collection<String> ranks = Arrays.asList(Rank); for (Iterator<String> i = suits.iterator();i.hasNext();){
for (Iterator<String> j = ranks.iterator();j.hasNext();){
System.out.println(i.next()+":"+j.next());
}
}
} public static void main(String arg[]) {
testfor();
}

  运行程序:

CLUB:ACE
DIAMOND:DEUCE
HEART:THREE
SPADE:FOUR
Exception in thread "main" java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:364)
at com.sankuai.ia.demo.web.controller.TESTController.testfor(TESTController.java:73)
at com.sankuai.ia.demo.web.controller.TESTController.main(TESTController.java:81)
NoSuchElementException : 访问越界:因为最外层的迭代器里面已经没有元素了。

for-each 好处:
 for (String i : suits) {
for (String j: ranks) {
System.out.println(i+":"+j);
}
}

使用for-each  可以解决这个问题且代码简洁。且实际上,在某些情况下,比起普通的for循环,for-each 还稍有些性能上的优势,因为它对数组边界值只计算一次。

Effective Java  第45条将局部变量的作用域最小化

好严重的警告⚠️:要是局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明。

1、如果变量在使用之前进行声明只会造成混乱

2、如果你还没有足够的信息来对这一个变量进行有意义的初始化,就应该推迟这个声明,直到可以初始化为止。

某些地方无法使用for-each方法:

1、过滤:需要调用集合的remove方法

2、转换:取代设定其他元素

3、平行迭代;并不是嵌套全部遍历那种。

												

for循环 && for-each的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  4. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

  5. 【JS基础】循环

    for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...

  6. 【python之路4】循环语句之while

    1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...

  7. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  8. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  9. .NET基础 一步步 一幕幕[循环、逻辑语句块]

    循环.逻辑语句块   好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...

  10. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

随机推荐

  1. 收藏品:MP3播放器

    大三下学期的时候,有一段生活激情似火. 那时候,我在外边接了项目,把宿舍的哥们儿都组织了起来,一起开发赚钱.我们在小区里租了房子,又多借了一台电脑,哥几个轮流上阵写代码.准备考研的兄弟也帮手做饭,我和 ...

  2. 用c语言创建双向环形链表

    作为一个C开发人员,无论在求职笔试题中,还是在工程项目中,都会遇到用c语言创建双向环形链表.这个也是理解和使用c指针的一项基本功. #include<...>//头文件省略 typedef ...

  3. vs2010直接调用av_register_all crash问题

    需要做一个视频导出的功能,通过ffmpeg来实现,vs2010里面引用ffmpeg库的 dll 和 lib 文件 第一步av_register_all就直接crash了, 查了近半天的时间,都快崩溃了 ...

  4. Ubuntu 15.10 下Redis Cluster使用

    1 Redis Standalone安装 可以参考这篇博文:http://www.cnblogs.com/_popc/p/3684835.html 2 Redis Cluster安装 2.1 环境介绍 ...

  5. python爬虫学习笔记(二)——基础篇之爬虫基本原理

    1.什么是爬虫? 请求网站并提取数据的自动化程序 2.爬虫基本流程 2.1发起请求 通过HTTP库向目标站点发起请求,即发起一个Request,请求可以包含额外的headers等信息,等待服务器响应: ...

  6. python excel表格操作

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. Creating and using a blendspace in c++

    转自:https://forums.unrealengine.com/development-discussion/c-gameplay-programming/104831-creating-and ...

  8. ibatis.net 循环

    if (oReqV[0]["tag"] != null && !string.IsNullOrEmpty(oReqV[0]["tag"].ToS ...

  9. 随机模块_random

    random.seed(a) 设置种子, 若不穿参数, 就使用系统时间种子相同, 每次生成的随机序列也相同计算机生成的随机数都是伪随机数, 通过算法的出 li = [] # 设置种子 random.s ...

  10. Garbage-Only-One的IO路

    我的任务计划 刷题计划 BZOJ 1.1202 2.1008 3.等等 搜索 1.搜索题单 学习计划 树 1.树状数组or树状数组or树状数组 2.线段树 搜索 1.A*