我是初学者,我无法理解Iterable
界面的实际效果。
答案 0 :(得分:44)
除了杰里米所说的,它的主要好处是它有一些语法糖:enhanced for-loop。如果你有一个Iterable<String>
,你可以这样做:
for (String str : myIterable) {
...
}
美好而轻松,不是吗?创建Iterator<String>
,检查hasNext()
和调用str = getNext()
的所有肮脏工作都是由编译器在幕后处理的。
由于大多数集合要么实现Iterable
,要么有一个返回一个的视图(例如Map
的{{1}}或keySet()
),这使得对集合的处理更多更容易。
Iterable
Javadoc提供了实施values()
的完整列表。
答案 1 :(得分:12)
如果你有一个复杂的数据集,比如一棵树或一个螺旋队列(是的,我只是这样做了),但你不关心它是如何在内部构建的,你只想要逐个获取所有元素,你得到它来返回一个迭代器。
有问题的复杂对象,无论是树或队列,还是WombleBasket实现Iterable,并且可以返回可以使用Iterator方法查询的迭代器对象。
这样,您可以询问它是否为hasNext()
,如果确实如此,则会获得next()
项,而不必担心从树或其他地方获取它的位置。
答案 2 :(得分:5)
返回java.util.Iterator
。它主要用于能够在增强型for循环中使用实现类型
List<Item> list = ...
for (Item i:list) {
// use i
}
在引擎盖下,编译器调用list.iterator()
并迭代它,在for循环中给出i
。
答案 3 :(得分:4)
接口的核心是一个类应该实现的方法列表。可迭代接口非常简单 - 只有一种方法可以实现:Iterator()
。当一个类实现Iterable
接口时,它告诉其他类你可以使用Iterator
对象来迭代(即遍历)对象中的数据。
答案 4 :(得分:3)
迭代器基本上允许迭代任何Collection。
这也是使用Java for-each控制语句所需要的。
答案 5 :(得分:0)
Iterable 被定义为泛型类型。
Iterable ,其中 T 类型参数表示迭代器返回的元素类型。
实现此接口的对象允许它成为“foreach”语句的目标。 for-each 循环用于遍历数组、集合。
阅读更多 -:https://examples.javacodegeeks.com/iterable-java-example-java-lang-iterable-interface/