1. 程式人生 > >Java語言中,Iterator和Iterable 區別聯絡

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]