原文:http://perfy315.iteye.com/blog/1459201
----------------------------------------------------------
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則不然,每次調用都會返回一個從頭開始計數的迭代器。?
????? 多個迭代器是互不干擾的。?