iterator java是什么,讓我們一起了解一下?
iterator java就是提供一種方法對一個容器對象中的各個元素進行訪問,而又不暴露該對象容器的內(nèi)部細節(jié)。
那么iterator的由來是怎樣的?
Java集合框架的集合類,我們有時候稱之為容器。容器的種類有很多種,比如ArrayList、LinkedList、HashSet…,每種容器都有自己的特點,ArrayList底層維護的是一個數(shù)組;LinkedList是鏈表結(jié)構(gòu)的;HashSet依賴的是哈希表,每種容器都有自己特有的數(shù)據(jù)結(jié)構(gòu)。
因為容器的內(nèi)部結(jié)構(gòu)不同,很多時候可能不知道該怎樣去遍歷一個容器中的元素。所以為了使對容器內(nèi)元素的操作更為簡單,Java引入了迭代器模式!
把訪問邏輯從不同類型的集合類中抽取出來,從而避免向外部暴露集合的內(nèi)部結(jié)構(gòu)。
對于數(shù)組我們使用的是下標來進行處理的:
1?int?array[]?=?new?int[3];???? 2?for?(int?i?=?0;?i??list?=?new?ArrayList(); 2????????for(int?i?=?0?;?i? 因此對于這兩種方式,我們總是都知道它的內(nèi)部結(jié)構(gòu),訪問代碼和集合本身是緊密耦合的,但無法將訪問邏輯從集合類和客戶端代碼中分離出來,該怎么辦?
不同的集合會對應(yīng)不同的遍歷方法,客戶端代碼無法復(fù)用,在實際應(yīng)用中如何將上面兩個集合整合是相當麻煩的,所以才有Iterator,它總是用同一種邏輯來遍歷集合,使得客戶端自身不需要來維護集合的內(nèi)部結(jié)構(gòu),所有的內(nèi)部狀態(tài)都由Iterator來維護??蛻舳瞬挥弥苯雍图线M行打交道,而是控制Iterator向它發(fā)送向前向后的指令,就可以遍歷集合。
一、java.util.Iterator
下面讓我們看看Java中的Iterator接口是如何實現(xiàn)的。
在Java中Iterator為一個接口,它只提供了迭代的基本規(guī)則。在JDK中它是這樣定義的:對Collection進行迭代的迭代器,迭代器取代了Java Collection Framework中的Enumeration。
迭代器與枚舉有兩點不同:
1. 迭代器在迭代期間可以從集合中移除元素。
2. 方法名得到了改進,Enumeration的方法名稱都比較長。
其接口定義如下:
package?java.util; public?interface?Iterator?{ ????boolean?hasNext();//判斷是否存在下一個對象元素 ????E?next();//獲取下一個元素 ????void?remove();//移除元素 } 二、Iterable
Java中還提供了一個Iterable接口,Iterable接口實現(xiàn)后的功能是‘返回’一個迭代器,我們常用的實現(xiàn)了該接口的子接口有:Collection、List、Set等。該接口的iterator()方法返回一個標準的Iterator實現(xiàn),實現(xiàn)Iterable接口允許對象成為Foreach語句的目標,就可以通過foreach語句來遍歷你的底層序列。
Iterable接口包含一個能產(chǎn)生Iterator對象的方法,并且Iterable被foreach用來在序列中移動。因此如果創(chuàng)建了實現(xiàn)Iterable接口的類,都可以將它用于foreach中。
Iterable接口的具體實現(xiàn):
Package?java.lang; import?java.util.Iterator; public?interface?Iterable?{undefined Iterator?iterator(); }以上就是小編今天的分享了,希望可以幫助到大家。