前言

下面的内容是我从百度知道拷贝出来的,也就不在贴出链接了。我总结下就是迭代器在集合中使用,用户不需要关心具体集合实现的是如何遍历(不暴露细节),按照迭代器的方式遍历。

作用

Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。
例如,如果没有使用Iterator,遍历一个数组的方法是使用索引:

for(int i=0; i<array.size(); i++) { ... get(i) ... }

而访问一个链表(LinkedList)又必须使用while循环:

while((e=e.next())!=null) { ... e.data() ... }

以上两种方法客户端都必须事先知道集合的内部结构,访问代码和集合本身是紧耦合,无法将访问逻辑从集合类和客户端代码中分离出来,每一种集合对应一种遍历方法,客户端代码无法复用。
更恐怖的是,如果以后需要把ArrayList更换为LinkedList,则原来的客户端代码必须全部重写。为解决以上问题,Iterator模式总是用同一种逻辑来遍历集合:

for(Iterator it = c.iterater(); it.hasNext(); )
{ ... }

奥秘在于客户端自身不维护遍历集合的"指针",所有的内部状态(如当前元素位置,是否有下一个元素)都由Iterator来维护,而这个Iterator由集合类通过工厂方法生成,因此,它知道如何遍历整个集合。
客户端从不直接和集合类打交道,它总是控制Iterator,向它发送"向前","向后","取当前元素"的命令,就可以间接遍历整个集合。

转载于:https://www.cnblogs.com/JuncaiF/p/11153357.html

Iterator作用相关推荐

  1. es6 初步深入学习

    es6初步深入学习 es6前言(只作了解就好) ECMAScript和JavaScript的关系 ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现(另外的EC ...

  2. 184_刘发顺_Java核心编程

    Java核心编程 Java 技术栈: Java基础 Java面向对象:Java 是一种面向对象的语言,它对对象中的类.对象.继承.封装.多态.接口.包等均有很好的支持.为了简单起见,Java 只支持类 ...

  3. java学习笔记————SSH

    ========================================== Struts2 ================================================= ...

  4. java集合Collection

    文章目录 ==Collection集合== Collection概述 Collection集合常用方法 Collection集合的遍历之iterator 概述 Iterator中的常用方法 集合使用步 ...

  5. Java 8 Stream的基本详解

    概述 tream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找.遍历.过滤以 ...

  6. 集合框架之ArrayDeque类详解

    Java集合框架分析(Deque)---ArrayDeque类详解 目录 一.数据结构 二.类标题 三.字段 四.构造函数 五.方法分析 类型 方法 作用 添加元素 public void addFi ...

  7. Iterator是什么,有什么作用?

    遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). It ...

  8. 2021-11-19迭代器的设计原则和iterator Traits的作用与设计

    iterator Traits 的作用是提取出 iteration 的五个性质: 1)iterator_category 迭代器的种类,是否可以间隔跳跃,是单向前进还是两端都可以. 2)value_t ...

  9. 迭代器Iterator接口的作用及其使用

    1. 迭代器Iterator的作用 什么是迭代器? 迭代器: 可以被next()函数调用并不断返回下一个值的对象称之为迭代器(Iterator) 从另一种角度来定义迭代器就是:提供一种方法访问一个容器 ...

最新文章

  1. 服务器设备监控系统,服务器设备监控系统
  2. redis中的order set 有序集合
  3. opencv1-加载、修改、保存图像
  4. 局域网IP搜索小工具
  5. 词性标注:中文词性标注简介
  6. SQL练习题:变更性别
  7. beego框架:static目录下的apk文件浏览器下载使用正常,手机浏览器下载无法解析安装
  8. 读文献——《ImageNet classification with deep convolutional neural networks》
  9. 用Python绘制当前日期
  10. 微信服务号、订阅号和企业号的差别(运营和开发两个角度)
  11. 身份证识别-全方位突破,高精度,轻量级!
  12. 公司要收我的毕业证书,这合法吗?——网上答疑(17)
  13. 考研英语 - word-list-37
  14. 分享一组Rpg Marker人物行走,游戏素材图片,共20张图片
  15. 新版汇编语言程序设计【课后习题答案】
  16. Apache Kylin CUBE 剪枝优化和cuboid数量计算公式总结
  17. 显示ffmpeg下载m3u8时进度
  18. 蚂蚁金服面试总结(一面没过)
  19. java数组字符串转数组或集合
  20. 一步了解html中的浮动

热门文章

  1. 20190608笔试题のCSS-属性继承
  2. Oracle12c异常关闭后启动PDBORCL(ORA-01033)
  3. (转) Linux 内核运行参数修改——sysctl命令
  4. sphinx配置 + php
  5. 关于图连通性的几道题(水)
  6. 免费的.NET混淆和反编译工具
  7. android 自定义xml属性
  8. php导入csv文件,php实现CSV文件导入和导出
  9. MATLAB对图片格式批量转换
  10. rnn按时间展开_双向RNN的理解