Iterator和Iterable的區別


剛剛接觸Java的集合類,從Collection一步一步向上查看源碼,發現Iterable和Iterator這兩個接口,剛開始看有點糊塗,怎么一下從Iterable接口繼承,一下Iterator()方法又在Iterable里面?下面一張圖可以比較清楚顯示兩者關系,用的是mindnode作圖。

Iterable和Iterator關系圖

我在剛開始看的時候,第一個疑問就是:為什么Collection接口要繼承於Iterable接口,而不是Iterator接口?在stackoverflow上找了很多回答,總結了三點,希望對剛剛接觸Collection集合類也在這里有困惑的同學有所幫助。原因大致有三點:

1. 在jdk 1.5以后,引入了Iterable,使用foreach語句(增強型for循環)必須使用Iterable類。

2. Java設計者讓Collection繼承於Iterable而不是Iterator接口。首先要明確的是,Iterable的子類Collection,Collection的子類List,Set等,這些是數據結構或者說放數據的地方。Iterator是定義了迭代邏輯的對象,讓迭代邏輯和數據結構分離開來,這樣的好處是可以在一種數據結構上實現多種迭代邏輯。

3. 更重要的一點是:每一次調用Iterable的Iterator()方法,都會返回一個從頭開始的Iterator對象,各個Iterator對象之間不會相互干擾,這樣保證了可以同時對一個數據結構進行多個遍歷。這是因為每個循環都是用了獨立的迭代器Iterator對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM