迭代器模式

先上类图:


迭代器模式_第1张图片

概述

java世界中用的最多的东西是什么?collection集合,对集合最多的操作是什么?遍历!!!信手拈来的for/in,还是显示的使用iterator,都是在使用我们的迭代器模式。

好处

1.官方描述

  • 统一了各集合类的遍历方式
  • 分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据(单一职责)。

2.通俗点

不管你用的集合是set还是list,还是queue你都可以在自己的业务代码里肆无忌惮的for(xx x : xxx){},因为for/in隐式的创建了迭代器,通过迭代器提供了元素的遍历,如果没有迭代器,set该如何遍历,queue该如何遍历,数组该如何遍历(java中数组需要自己为其实现一个迭代器)各不相同,使用者需要知道这些集合内部元素怎么实现的,才采用对应的方式去遍历它。

注意,map类别并没有直接提供迭代器实现,可以先获取keySet或entryset,再进行迭代。

java实现的一些定制化迭代器

  • 列表迭代器ListIterator(只适用于list及其子类)

ListIterator的特殊功能:

1.add(E e): 将指定的元素插入到集合中,该方法无返回值,它在操作时总会改变链表结构。该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous返回的下一个元素之后(如果有);如果列表没有元素,那么新元素就成为列表中的唯一元素。新元素被插入到隐式光标前:不影响对 next 的后续调用,并且对 previous 的后续调用会返回此新元素
2.previous():返回列表中的前一个元素。
3.hasPrevious():如果以逆向遍历列表,列表迭代器有多个元素,则返回true。
4.nextIndex():返回对 next 的后续调用所返回元素的索引。
5.previousIndex():返回对 previous 的后续调用所返回元素的索引。(如果列表迭代器在列表的开始,则返回 -1)。
6.set(E e):用指定元素替换 next 或 previous 返回的最后一个元素。只有在最后一次调用 next 或 previous 后既没有调用 ListIterator.remove 也没有调用 ListIterator.add 时才可以进行该调用。

你可能感兴趣的:(迭代器模式)