Java中’for’的使用

我是Java的新手,在关于for循环的另一个Stack Overflow问题中,答案说Java中有两种用法:

for (int i = 0; i < N; i++) { } for (String a : anyIterable) { } 

我知道第一次使用for并且已经使用了很多,但我从未见过第二个。 过去做什么以及何时使用它?

您指定的两个中的第一个是经典的C for循环。 这使程序员可以控制迭代标准并允许三个操作:初始化; 循环测试; 增量表达式。 虽然它常常用于递增重复一定次数的尝试,例如:

 for (int i=0; i < N : i++) 

代码中有许多实例,其中for用于迭代集合:

 for (Iterator iter = myList.iterator(); iter.hasNext();) 

为了缓解第二种类型的boeplading(第三种子句经常未被使用),并且为了补充Java 1.5中引入的generics ,你的两个例子中的第二个 - 增强的for循环或for-each loop - 被引入。

第二个用于数组和通用集合。 请参阅此文档 。 它允许您遍历一个通用集合,在那里您知道Collection的类型,而不必将Iterator.next()的结果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 } 

循环的这种“新风格”也可以用于数组:

 String[] strArray= ... for (String myStr : strArray) { //...do something with myStr } 

“for in”循环主要是令人眼花缭乱,使代码更容易阅读。 (如果你发音为:as“in”)。

每当我在列表或数组上进行迭代时,我几乎只在我自己的代码中使用第二种类型。

在处理大部分数学代码时,我仍然使用常规for循环,或者当我需要“i”来查看循环次数时。

它用于遍历整个数组或Iterable集合。 它基本上取代了:

 for(int i=0; i 

并且可以与Generics一起使用,这非常酷

它被称为每个循环,基本上,它可以与任何实现的东西一起使用

 java.lang.Iterable 

通用集合实现了这个接口,但你也可以创建自己的类。 它使得处理列表/集合中的所有内容变得非常容易,尽管缺点是您没有像在传统循环中那样明确访问列表中的当前数字。 由于对迭代器类的调用,传统循环上存在与此类循环相关的一些额外开销。

它们在function上都相同,但对于(String a:anyIterable){} ,它更易读,更少打字和更短。 for(int i = 0; i 索引集合,循环控制变量ifor(String a:anyIterable){}不索引集合