对于循环forms:Java中的“for(A b:c)”

这是我第一次看到这种语法:

// class Node public class Node { ... ... } public class Otherclass { ... } Otherclass graph = new Otherclass(); // getSuccessors is a method of Otherclass class Node currentNode ; List successors = graph.getSuccessors(currentNode); // weird for loop for (Node son : successors) { // do something } 

循环是什么? 某种Matlab语法?

还有其他方法可以编写for循环吗?

问候

这是每个循环的一个。 你也可以像这样写:

 for(int i = 0; i < successors.size(); i++) { Node son = successors.get(i); } 

虽然我个人这样做的唯一时间是需要索引来执行除访问元素之外的其他操作。

这是一个for-each循环(也称为enhanced-for )。

 for (type var : arr) { //could be used to iterate over array/Collections class body-of-loop } 

在Java 5中扩展了基本for循环,以便更方便地对数组和其他集合进行迭代。 这个较新的for语句称为增强for或for-each

(文档)

这是声明的增强。 见14.14.2节。 增强的Java语言规范声明 。

它意味着“为successors中的每个sonson的类型是Node

它被称为Enhanced for-loop 。 它基本上通过按顺序获取每个元素来遍历Collection。 因此您不需要访问索引上的元素。

 List list = new ArrayList(); for (int val: list) { System.out.println(val); // Prints each value from list } 

请参见§14.14.2 – Java语言规范的增强for循环部分。

这是for循环的一种表示

 for(int i=0;i 

这不是for循环,但你仍然可以这样做。

 Iterator itr = successors.iterator(); while(itr.hasNext()){ Node myNode = itr.next(); // your logic } 

它被称为增强的for循环,而不是使用迭代器迭代集合,你可以简单地使用它for循环

使用迭代器

 Iterator i=a.iterator(); while(i.hasNext()) { String s=i.next(); } 

你可以简单地使用增强的for循环。

 for(String s : a) { .. do something } 

所以它只是Java 5中引入的一个语法糖,它执行迭代器的相同function,并在内部使用迭代器。 该类应该实现Iterator接口,以便使用它for循环

 class Node implements Iterator{ @Override public boolean hasNext() { // TODO Auto-generated method stub return false; } @Override public String next() { // TODO Auto-generated method stub return null; } @Override public void remove() { // TODO Auto-generated method stub } }