Java編程Iterator迭代器設(shè)計(jì)原理及實(shí)現(xiàn)代碼示例
我們知道迭代器(Iterator)是一種對(duì)象,它能夠用來遍歷標(biāo)準(zhǔn)模板庫容器中的部分或全部元素。那么Iterator迭代器的設(shè)計(jì)原理是什么呢?迭代器問什么定義了一個(gè)借口,而不是一個(gè)類呢?
我們假設(shè)迭代器迭代數(shù)據(jù)的功能定義為了一個(gè)類,那么,會(huì)有這樣的問題。不同的集合,由于數(shù)據(jù)結(jié)構(gòu)不一樣,所以他們的存儲(chǔ)方式也是不一樣的。也就是說,迭代器獲取的時(shí)候,獲取的方式是變化的,也就是不固定的。所以把這種方式定義為具體的實(shí)現(xiàn)是不合理的。
無論何種集合,他們肯定都有獲取的功能,而且不知道什么時(shí)候就沒有數(shù)據(jù)了。所有他們也會(huì)有判斷功能。于是,就把判斷和獲取功能抽取出來,定義在接口中。這樣的話,將來無論是哪種集合在遍歷的時(shí)候,它們自己只要去實(shí)現(xiàn)迭代器接口即可。
那具體怎么實(shí)現(xiàn)的呢?集合迭代器是以內(nèi)部類的方式實(shí)現(xiàn)的。簡單看一段代碼。
package me.socketthread;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo {
public static void main(String[] args) {
//創(chuàng)建對(duì)象
Collection c = new ArrayList();
//添加元素
c.add("hello");
c.add("world");
c.add("helloworld");
//遍歷集合對(duì)象,通過集合對(duì)象調(diào)用方法c.iterator()得到迭代器對(duì)象Iterator
Iterator it = c.iterator(); //返回的是Iterator的子類對(duì)象,多態(tài)。
while (it.hasNext()) { //檢查序列中是否還有元素
//System.out.println(it.next());
String s =(String)it.next();//獲得序列中的下一個(gè)元素
System.out.println(s);
}
}
}
輸出
hello world helloworld
總結(jié)
以上就是本文關(guān)于Java編程Iterator迭代器設(shè)計(jì)原理及實(shí)現(xiàn)代碼示例的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Java編程利用socket多線程訪問服務(wù)器文件代碼示例、Java多線程編程實(shí)現(xiàn)socket通信示例代碼等,有什么問題,可以留言,歡迎大家交流討論。感謝朋友們對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
springboot讀取resource配置文件生成容器對(duì)象的示例代碼
這篇文章主要介紹了springboot讀取resource配置文件生成容器對(duì)象的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
SpringBoot如何配置文件properties和yml
這篇文章主要介紹了SpringBoot如何配置文件properties和yml問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
springboot整合rabbitmq實(shí)現(xiàn)訂單超時(shí)取消案例分析
本文介紹了如何使用SpringBoot和RabbitMQ實(shí)現(xiàn)訂單超時(shí)取消功能,通過配置TTL隊(duì)列和死信交換機(jī),可以管理訂單的超時(shí)邏輯,實(shí)際應(yīng)用中,可以通過數(shù)據(jù)庫標(biāo)記訂單狀態(tài)或手動(dòng)確認(rèn)機(jī)制來防止訂單被錯(cuò)誤取消2025-01-01
深入學(xué)習(xí)Java單元測(cè)試(Junit+Mock+代碼覆蓋率)
在做單元測(cè)試時(shí),代碼覆蓋率常常被拿來作為衡量測(cè)試好壞的指標(biāo),甚至,用代碼覆蓋率來考核測(cè)試任務(wù)完成情況,比如,代碼覆蓋率必須達(dá)到80%或 90%。下面我們就來詳細(xì)學(xué)習(xí)下java單元測(cè)試吧2019-06-06
java實(shí)現(xiàn)靜默加載Class示例代碼
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)靜默加載Class的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
Mybatis之通用Mapper動(dòng)態(tài)表名及其原理分析
這篇文章主要介紹了Mybatis之通用Mapper動(dòng)態(tài)表名及其原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
SpringBoot-RestTemplate如何實(shí)現(xiàn)調(diào)用第三方API
這篇文章主要介紹了SpringBoot-RestTemplate實(shí)現(xiàn)調(diào)用第三方API的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

