先上類(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)用。