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

时间:2012-11-22 15:41:34

标签: java loops for-loop foreach

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

// class Node
public class Node { 

...
...

}

public class Otherclass { ... }

Otherclass graph = new Otherclass();

// getSuccessors is a method of Otherclass class 

Node currentNode ;

List<Node> successors = graph.getSuccessors(currentNode);

// weird for loop 

for (Node son : successors) { 

// do something 

}

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

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

此致

8 个答案:

答案 0 :(得分:8)

这是 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-each

<强> (Documentation)

答案 1 :(得分:4)

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

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

虽然我个人这样做的唯一时间是除了访问元素之外还需要做索引。

答案 2 :(得分:4)

这是增强的声明。请参阅Java语言规范的14.14.2. The enhanced for statement 部分。

答案 3 :(得分:3)

它被称为Enhanced for-loop。它基本上通过按顺序获取每个元素来迭代Collection。所以你不需要访问索引上的元素。

List<Integer> list = new ArrayList<Integer>();

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

请参阅Java语言规范的§14.14.2 - Enhanced for loop部分。

答案 4 :(得分:2)

sonsuccessors的每个son来说,Node的类型为{{1}}“

答案 5 :(得分:2)

这是for循环的一种表示

for(int i=0;i<successors.size();i++){

        Node myNode = successors.get(i);
    }

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

Iterator<Node> itr = successors.iterator();

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

答案 6 :(得分:1)

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

使用迭代器

Iterator<String> i=a.iterator();

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

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

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

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

class Node<T> implements Iterator<String>{

@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

}



}

答案 7 :(得分:-1)

在这种情况下,它是一个 for each 循环,它是这样写的