迭代器模式

先上类图:


概述

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 时才可以进行该调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 工资表数据的整合## 考虑这样一个实际应用:整合工资表数据。 这个项目的背景是这样的,项目...
    七寸知架构阅读 2,581评论 0 53
  • 目录 本文的结构如下: 引言 什么是迭代器模式 模式的结构 典型代码 代码示例 优点和缺点 适用环境 模式应用 一...
    w1992wishes阅读 539评论 0 1
  • 迭代器模式(Iterator)用于在数据集合中按照顺序遍历集合,在遍历的同时不需要暴露对象的内部表示,根据不同的需...
    Code4Android阅读 393评论 0 3
  • 本篇文章介绍一种设计模式——迭代器模式。本篇文章内容参考:《JAVA与模式》之迭代子模式, 23种设计模式(13)...
    Ruheng阅读 5,616评论 0 6
  • 米叔的电影看过好几部,《印度往事》,《未知死亡》,《地球上的星星》,《三傻大闹宝莱坞》,《我的个神啊》,下午下班带...
    七月紫苏阅读 248评论 1 0