for循环 && for-each
Posted cjn123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了for循环 && for-each相关的知识,希望对你有一定的参考价值。
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循环 && for-each的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 Java for-each 循环中访问迭代计数器?
for 循环和 for-each 循环之间是不是存在性能差异?