2009-06-29 51 views

回答

37

除了杰里米所说的,它的主要好处是它有自己的一点语法糖:enhanced for-loop。如果你有,比如说,一个Iterable<String>,你可以这样做:

for (String str : myIterable) { 
    ... 
} 

尼斯和容易,不是吗?创建Iterator<String>的所有肮脏工作,检查它是否hasNext(),以及调用str = getNext()由编译器在幕后处理。

而且由于大多数集合实现了Iterable或者有一个返回1的视图(例如MapkeySet()values()),这使得使用集合更容易。

Iterable Javadoc给出了实现Iterable的类的完整列表。

11

如果你有一个复杂的数据集,像一棵树或一个螺旋队列(是的,我只是做了这件事),但你不在乎它是如何在内部结构,你只是想要所有的元素通过一个,你得到它返回一个迭代器。

有问题的复杂对象,无论是树还是队列或WombleBasket实现Iterable,并且可以返回可以使用Iterator方法查询的迭代器对象。

这样,你可以问它是否它hasNext(),如果是这样,你得到next()项,而不用担心从哪里得到树或任何地方。

3

迭代器基本上允许迭代任何集合。

这也是为每个控制语句使用Java的要求。

5

它返回一个java.util.Iterator。它主要用于为能够使用实施类型中增强的for循环

List<Item> list = ... 
for (Item i:list) { 
// use i 
} 

引擎盖下的编译器调用list.iterator()和迭代时,给你里面的i for循环。

+0

ahhh - 太慢;-) – 2009-06-29 16:12:15

3

接口的核心是一个类应该实现的方法列表。可迭代接口非常简单 - 只有一种方法可以实现:Iterator()。当一个类实现了Iterable接口时,它告诉其他类可以使用Iterator对象迭代(即遍历)对象中的数据。