我对Java很新,在另一个关于for loops的Stack Overflow问题中,答案说Java中有两种用法:
for (int i = 0; i < N; i++) {
}
for (String a : anyIterable) {
}
我知道第一次使用for并且已经使用了很多,但我从未见过第二个。过去做什么以及何时使用它?
答案 0 :(得分:37)
您指定的两个中的第一个是经典的C for
循环。这使程序员可以控制迭代标准并允许三个操作:初始化;循环测试;增量表达式。虽然它常常用于递增重复一定次数的尝试,例如:
for (int i=0; i < N : i++)
代码中有更多实例,其中for
用于迭代集合:
for (Iterator iter = myList.iterator(); iter.hasNext();)
缓存第二种类型的boeplading(第三种子句经常未被使用),并赞美Java 1.5中引入的Generics,这是你的两个例子中的第二种 - 增强的for循环,或{ {3}} - 介绍了。
第二个用于数组和通用集合。 for-each loop
。它允许您遍历一个通用集合,在那里您知道Collection
的类型,而不必将Iterator.next()
的结果转换为已知类型。
比较
for(Iterator iter = myList.iterator; iter.hasNext() ; ) {
String myStr = (String) iter.next();
//...do something with myStr
}
带
for (String myStr : myList) {
//...do something with myStr
}
这个'new style'for循环也可以用于数组:
String[] strArray= ...
for (String myStr : strArray) {
//...do something with myStr
}
答案 1 :(得分:4)
“for in”循环主要是眼花缭乱,使代码更容易阅读。 (如果你发音为:as“in”)。
每当我在列表或数组上进行迭代时,我几乎只在我自己的代码中使用第二种类型。
在处理大部分数学代码时,或者当我需要“i”来查看循环次数时,我仍然使用常规for循环。
答案 2 :(得分:1)
它用于遍历整个数组或Iterable集合。它基本上取代了:
for(int i=0; i<N.length; i++)
可以和非常酷的Generics一起使用
答案 3 :(得分:1)
它被称为每个循环,基本上,它可以与任何实现
的东西一起使用java.lang.Iterable
通用集合实现了这个接口,但你也可以创建自己的类。它使得处理列表/集合中的所有内容变得非常容易,尽管缺点是您没有像在传统循环中那样明确访问列表中的当前数字。由于对迭代器类的调用,传统循环中存在与此类循环相关的额外开销。
答案 4 :(得分:0)
两者在功能上都相同,但是 for(String a:anyIterable){} ,更具可读性,更少打字和更短。 for(int i = 0; i&lt; N:i ++)索引集合,循环控制变量 i 和 for(String a:anyIterable){} 不会对集合编制索引