1. 程式人生 > >Java集合類是Iterable的實現類的原因

Java集合類是Iterable的實現類的原因

介紹

Iterator和Iterable都是介面。
好多集合類,比如List一族或者Set一族,都實現了Iterable介面,這樣物件就可以呼叫iterator()方法。
一般都是結合著用,比如 HashMap類就實現了Iterable介面,而要訪問或打印出Map中所有內容時,就可以這樣:

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

為什麼集合Collection、List、Set是Iterable的實現類,而不是直接實現iterator介面

1).Iterator是迭代器類,而Iterable是為了只要實現該介面就可以使用foreach,進行迭代.
2).Iterable中封裝了Iterator介面,只要實現了Iterable介面的類,就可以使用Iterator迭代器了。(Iterable介面中,只有一個方法,那就是返回一個Iterator物件)
3).集合Collection、List、Set都是Iterable的實現類,所以他們及其他們的子類都可以使用foreach進行迭代。
4).因為Iterator介面的核心方法next()或者hasNext() 是依賴於迭代器的當前迭代位置的。 如果Collection直接實現Iterator介面,勢必導致集合物件中包含當前迭代位置的資料(指標)。 當集合在不同方法間被傳遞時,由於當前迭代位置不可預置,那麼next()方法的結果會變成不可預知。 除非再為Iterator介面新增一個reset()方法,用來重置當前迭代位置。但即時這樣,Collection也只能同時存在一個當前迭代位置,而Iterable則不然,每次呼叫都會返回一個從頭開始計數的迭代器,多個迭代器是互不干擾的。