当前位置: 首页 > news >正文

设计模式:11、迭代器模式(游标)

目录

0、定义

1、迭代器模式的四种角色

2、迭代器模式的UML类图

3、示例代码

4、迭代器的next()方法与集合的get(int index)方法的效率对比(LinkedList为例)


0、定义

        提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

1、迭代器模式的四种角色

  • 集合(Aggregate):一个接口,规定了具体集合需实现的操作。
  • 具体集合(ConcreteAggregate):具体集合是实现集合接口的类的实例,具体集合按着一定结构存储对象。具体集合应当有一个方法,该方法返回一个针对该集合的具体迭代器
  • 迭代器(Iterator):一个接口,规定了遍历具体集合的方法,比如next()方法。
  • 具体迭代器(ConcreteIterator):实现迭代器接口的类的实例。具体迭代器在现实迭代器接口所规定的遍历集合的方法时,比如next()方法,要保证next()方法的首次调用将按着集合的数据结构找到该集合中的一个对象,而且每当找到集合中的一个对象,立刻根据该集合的存储结构得到待遍历的后继对象的引用,并保证依次调用next()方法可以遍历集合

2、迭代器模式的UML类图

3、示例代码

待设计……

4、迭代器的next()方法与集合的get(int index)方法的效率对比(LinkedList为例)

package xyz.jangle.list;import java.util.Iterator;
import java.util.LinkedList;public class ListMain {public static void main(String[] args) {LinkedList<String> list = new LinkedList<String>();for (int i = 0; i < 39999; i++) {list.add(""+i);}Iterator<String> iterator = list.iterator();long time1 = System.currentTimeMillis();while(iterator.hasNext()) {System.out.println(iterator.next());}long time2 = System.currentTimeMillis();for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}long time3 = System.currentTimeMillis();System.out.println("Iterator:"+(time2-time1));System.out.println("For:"+(time3-time2));}}

输出结果

Iterator:153
For:1855

总结:使用迭代器效率要比get方法快很多,数量越大,效果越明显。

http://www.lryc.cn/news/494068.html

相关文章:

  • Oracle SCN与时间戳的映射关系
  • 【广告投放系统】头条可视化投放平台vue3+element-plus+vite落地历程和心得体会
  • Gazebo插件相机传感器(可订阅/camera/image_raw话题)
  • 华三(HCL)和华为(eNSP)模拟器共存安装手册
  • 信息学奥赛一本通 1448:【例题1】电路维修 | 洛谷 P4667 [BalticOI 2011 Day1] Switch the Lamp On 电路维修
  • k8s删除网络组件错误
  • MySQL之JDBC
  • 音视频入门基础:MPEG2-TS专题(10)——PAT简介
  • ElementUI:el-drawer实现在父组件区域内打开抽屉组件非全屏
  • Vue教程|搭建vue项目|Vue-CLI2.x 模板脚手架
  • jmeter学习(7)命令行控制
  • BGP协议路由黑洞
  • 存储结构及关系(一)
  • 玄机应急:linux入侵排查webshell查杀日志分析
  • python爬虫安装教程
  • 田忌赛马五局三胜问题matlab代码
  • Spring循环依赖问题的解决
  • KAN-Transfomer——基于新型神经网络KAN的时间序列预测
  • 鸿蒙学习自由流转与分布式运行环境-价值与架构定义(1)
  • 【k8s深入理解之 Scheme 补充-2】理解 register.go 暴露的 AddToScheme 函数
  • uni-app写的微信小程序每次换账号登录时出现缓存上一个账号数据的问题
  • 数据分析流程中的Lambda架构,以及数据湖基于Hadoop、Spark的实现
  • Android 原生解析 Json 字符串
  • Windsurf可以上传图片开发UI了
  • Qt UI设计 菜单栏无法输入名字
  • blender 视频背景
  • 【python】OpenCV—Tracking(10.5)—dlib
  • 音视频入门基础:MPEG2-TS专题(9)——FFmpeg源码中,解码TS Header的实现
  • 解决“磁盘已插上,但Windows系统无法识别“问题
  • 论文笔记-WWW2024-ClickPrompt