关于“for”语句中迭代器对象的问题

时间:2011-06-03 18:24:08

标签: java

我试图理解一个java程序,它有一个代码段,如

for (final Document document : cluster.getDocuments())  {  
    if (documentsShown >= maxNumberOfDocumentsToShow)  {  
        break;  
    }  
    displayDocument(level + 1, document);  
    documentsShown++;  
}  

这是否意味着cluster.getDocuments()必须是迭代器对象?

4 个答案:

答案 0 :(得分:7)

它必须是可迭代的对象(即集合或数组)。基本上,

  

它通常用于迭代   数组或集合类(例如,   数组列表)。它也可以迭代   任何实现的东西   可迭代接口(必须定义   iterator()方法)。很多人   集合类(例如,ArrayList)   实现Iterable,这使得   for-each循环非常有用。您可以   也为你实现Iterable   自己的数据结构。

Reference

All Known Implementing Classes of Iterable

答案 1 :(得分:3)

您迭代的集合必须实现Iterable<E>接口,以便代码在内部编译成

Iterator<Document> iterator = cluster.getDocuments().iterator();
while (iterator.hasNext()) {
 // iteration
}

当然,这意味着如果您提供Iterable接口,则可以为自定义对象提供自定义迭代。

答案 2 :(得分:1)

不一定是迭代器对象,但它需要能够迭代(数组,列表,集等等)。

答案 3 :(得分:1)

不,java的优点在于它的所有集合都实现了Collection interface,因此for-each构造适用于集合。 Cluster.getDocuments()很可能是某种集合。

要使用for-each构造,尽管对象只需要实现Iterable interface,其中Collection是子类。