迭代器模式

先上類(lèi)圖:


概述

java世界中用的最多的東西是什么?collection集合,對(duì)集合最多的操作是什么?遍歷?。?!信手拈來(lái)的for/in,還是顯示的使用iterator,都是在使用我們的迭代器模式。

好處

1.官方描述

  • 統(tǒng)一了各集合類(lèi)的遍歷方式
  • 分離了集合對(duì)象的遍歷行為,抽象出一個(gè)迭代器類(lèi)來(lái)負(fù)責(zé),這樣不暴露集合的內(nèi)部結(jié)構(gòu),又可讓外部代碼透明的訪問(wèn)集合內(nèi)部的數(shù)據(jù)(單一職責(zé))。

2.通俗點(diǎn)

不管你用的集合是set還是list,還是queue你都可以在自己的業(yè)務(wù)代碼里肆無(wú)忌憚的for(xx x : xxx){},因?yàn)閒or/in隱式的創(chuàng)建了迭代器,通過(guò)迭代器提供了元素的遍歷,如果沒(méi)有迭代器,set該如何遍歷,queue該如何遍歷,數(shù)組該如何遍歷(java中數(shù)組需要自己為其實(shí)現(xiàn)一個(gè)迭代器)各不相同,使用者需要知道這些集合內(nèi)部元素怎么實(shí)現(xiàn)的,才采用對(duì)應(yīng)的方式去遍歷它。

注意,map類(lèi)別并沒(méi)有直接提供迭代器實(shí)現(xiàn),可以先獲取keySet或entryset,再進(jìn)行迭代。

java實(shí)現(xiàn)的一些定制化迭代器

  • 列表迭代器ListIterator(只適用于list及其子類(lèi))

ListIterator的特殊功能:

1.add(E e): 將指定的元素插入到集合中,該方法無(wú)返回值,它在操作時(shí)總會(huì)改變鏈表結(jié)構(gòu)。該元素直接插入到 next 返回的下一個(gè)元素的前面(如果有),或者 previous返回的下一個(gè)元素之后(如果有);如果列表沒(méi)有元素,那么新元素就成為列表中的唯一元素。新元素被插入到隱式光標(biāo)前:不影響對(duì) next 的后續(xù)調(diào)用,并且對(duì) previous 的后續(xù)調(diào)用會(huì)返回此新元素
2.previous():返回列表中的前一個(gè)元素。
3.hasPrevious():如果以逆向遍歷列表,列表迭代器有多個(gè)元素,則返回true。
4.nextIndex():返回對(duì) next 的后續(xù)調(diào)用所返回元素的索引。
5.previousIndex():返回對(duì) previous 的后續(xù)調(diào)用所返回元素的索引。(如果列表迭代器在列表的開(kāi)始,則返回 -1)。
6.set(E e):用指定元素替換 next 或 previous 返回的最后一個(gè)元素。只有在最后一次調(diào)用 next 或 previous 后既沒(méi)有調(diào)用 ListIterator.remove 也沒(méi)有調(diào)用 ListIterator.add 時(shí)才可以進(jìn)行該調(diào)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 場(chǎng)景問(wèn)題# 1.1 工資表數(shù)據(jù)的整合## 考慮這樣一個(gè)實(shí)際應(yīng)用:整合工資表數(shù)據(jù)。 這個(gè)項(xiàng)目的背景是這樣的,項(xiàng)目...
    七寸知架構(gòu)閱讀 2,640評(píng)論 0 53
  • 目錄 本文的結(jié)構(gòu)如下: 引言 什么是迭代器模式 模式的結(jié)構(gòu) 典型代碼 代碼示例 優(yōu)點(diǎn)和缺點(diǎn) 適用環(huán)境 模式應(yīng)用 一...
    w1992wishes閱讀 600評(píng)論 0 1
  • 迭代器模式(Iterator)用于在數(shù)據(jù)集合中按照順序遍歷集合,在遍歷的同時(shí)不需要暴露對(duì)象的內(nèi)部表示,根據(jù)不同的需...
    Code4Android閱讀 447評(píng)論 0 3
  • 本篇文章介紹一種設(shè)計(jì)模式——迭代器模式。本篇文章內(nèi)容參考:《JAVA與模式》之迭代子模式, 23種設(shè)計(jì)模式(13)...
    Ruheng閱讀 5,697評(píng)論 0 6
  • 米叔的電影看過(guò)好幾部,《印度往事》,《未知死亡》,《地球上的星星》,《三傻大鬧寶萊塢》,《我的個(gè)神啊》,下午下班帶...
    七月紫蘇閱讀 270評(píng)論 1 0

友情鏈接更多精彩內(nèi)容