1. 程式人生 > 實用技巧 >Iterator和Iterable的區別

Iterator和Iterable的區別

>>> hot3.png

public interface Iterator<E>
public interface Iterable<T>

這兩個都是介面,但是Iterable介面中包含了Iterator

175508_N8xi_3209213.png

但是問題是為什麼Map,List,Set等要implements Iterable 而不是Iterator這個介面

原因是:

因為Iterator介面的核心方法next()或者hasNext() 是依賴於迭代器的當前迭代位置的。
如果Collection直接實現Iterator介面,勢必導致集合物件中包含當前迭代位置的資料(指標)。
當集合在不同方法間被傳遞時,由於當前迭代位置不可預置,那麼next()方法的結果會變成不可預知。

除非再為Iterator介面新增一個reset()方法,用來重置當前迭代位置。
但即時這樣,Collection也只能同時存在一個當前迭代位置。
而Iterable則不然,每次呼叫都會返回一個從頭開始計數的迭代器。
多個迭代器是互不干擾的。

轉載於:https://my.oschina.net/mdxlcj/blog/1576262