java.lang.Iterable
java.util.Iterator
來自百度知道:
Iterator是迭代器類,而Iterable是接口。
好多類都實現了Iterable接口,這樣對象就可以調用iterator()方法。
一般都是結合着用,比如
HashMap類就實現了Iterable接口,而要訪問或打印出Map中所有內容時,就可以這樣: HashMap hashMap;
Iterator iter = hashMap.iterator();
while(iter.hashNext()) {
String s = iter.next();
}
轉至:http://liuyun025.iteye.com/blog/1321045
為什么一定要實現Iterable接口,為什么不直接實現Iterator接口呢?
看一下JDK中的集合類,比如List一族或者Set一族,都是實現了Iterable接口,但並不直接實現Iterator接口。
仔細想一下這么做是有道理的。
因為Iterator接口的核心方法next()或者hasNext() 是依賴於迭代器的當前迭代位置的。
如果Collection直接實現Iterator接口,勢必導致集合對象中包含當前迭代位置的數據(指針)。
當集合在不同方法間被傳遞時,由於當前迭代位置不可預置,那么next()方法的結果會變成不可預知。
除非再為Iterator接口添加一個reset()方法,用來重置當前迭代位置。
但即時這樣,Collection也只能同時存在一個當前迭代位置。
而Iterable則不然,每次調用都會返回一個從頭開始計數的迭代器。
多個迭代器是互不干擾的。