Java語言中,Iterator和Iterable 區別聯繫

java.lang.Iterable 
java.util.Iterator 

正在學習Java面相對象程序設計,作業中有有一些集合類都是實現了Iterable接口,但是我對這一問題知之甚少,於是在查閱資料中也稍微總結一下
區別:
Iterator是迭代器類,而Iterable是接口。
好多類都實現了Iterable接口,這樣對象就可以調用iterator()方法。
一般都是結合着用,比如
HashMap類就實現了Iterable接口,而要訪問或打印出Map中所有內容時,就可以這樣:

HashMap hashMap; 
Iterator iter = hashMap.iterator(); 
while(iter.hashNext()) { 
String s = iter.next(); 
} 

但是爲什麼一定要實現Iterable接口,爲什麼不直接實現Iterator接口呢?
看一下JDK中的集合類,比如List或者Set,都是實現了Iterable接口,但並不直接實現Iterator接口。 仔細想一下這麼做是有道理的。
因爲Iterator接口的 核心方法 next()或者hasNext() 是依賴於 迭代器的當前迭代位置的
如果Collection直接實現Iterator接口,勢必導致集合對象中包含當前迭代位置的數據(指針)。
當集合在不同方法間被傳遞時,由於當前迭代位置不可預知,那麼next()方法的結果會變成不可預知。
除非再爲Iterator接口添加一個reset()方法,用來重置當前迭代位置。
但即時這樣,Collection也只能同時存在一個當前迭代位置。
而Iterable則不然,每次調用都會返回一個從頭開始計數的迭代器。

  其他參考資料 Java中迭代器的使用
  [http://www.cnblogs.com/airwindow/archive/2012/06/25/2560811.html]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章