【设计模式探索——智能遍历:如何用迭代器模式优化AI数据处理】

devtools/2024/12/24 3:50:16/

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”

文章目录

世上本没有迭代器,不爽的人多了,便有了迭代器 --- 鲁.不正经.Aileen

在这里插入图片描述

迭代器

含义

迭代器:提供一个方式来遍历集合,无需暴露集合的实现

在这里插入图片描述

  1. Client(客户端):这是使用迭代器模式的外部代码,它通过迭代器来访问聚集中的元素。

  2. AbstractIterator(抽象迭代器):这是一个抽象类或接口,定义了迭代器的接口,包括GetFirst(), GetNext(), 和 AtEnd()方法。GetFirst()用于获取聚集中的第一个元素,GetNext()用于获取当前元素的下一个元素,而AtEnd()用于检查是否已经到达聚集的末尾。

  3. AbstractAggregate(抽象聚集):这是一个抽象类或接口,定义了创建相应迭代器的方法CreateIterator()。所有的聚集类都将实现这个接口。

  4. Aggregate(聚集):这是具体的聚集类,它实现了AbstractAggregate接口,并提供了CreateIterator()方法的具体实现,用于返回一个迭代器对象。

  5. Iterator(迭代器):这是具体的迭代器类,它实现了AbstractIterator接口。它负责维护一个游标来跟踪当前遍历的位置,并实现了遍历聚集元素的具体逻辑。

  6. CreateIterator():这是在抽象聚集和具体聚集中定义的方法,用于创建并返回一个迭代器对象。

图中的箭头表示类之间的继承关系(实线带空心三角形)和依赖关系(虚线箭头)。客户端依赖于抽象迭代器来遍历聚集,而具体的聚集类则负责提供迭代器的具体实现。

迭代器模式的优点

  • 聚集的接口可以独立于遍历它的迭代器的接口。
  • 可以为同一个聚集定义多个迭代器,以支持不同的遍历。
  • 可以容易地添加新的迭代器,而不影响现有的聚集和迭代器。

在这里插入图片描述

  • 迭代器: 是一种可以遍历容器的机制,使得程序员能够使用相同的代码对不同的数据容器进行遍历。迭代器背后的机制是迭代器协议,一个对象只要有_iter__next_方法,他就是一个迭代器。迭代器的惰性加载特性使得在处理大量数据时,程序的编写变的更加方便。
java">public class Interator_Explor {public static void main(String[] args) {// 数组遍历方式1:通过下标遍历int[] arr = {66,77,99};for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}// 数组遍历方式2:for-each循环: 是上面代码的一种简化int[] arr2 = {1,2,3};for(int j : arr2){System.out.println();}}
}
java">import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;public class Interator_Explor {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(99);list.add(77);list.add(33);//集合遍历方式1:迭代器//先把集合中的元素导入到迭代器中Iterator<Integer> i = list.iterator();//通过while循环去遍历迭代器中的元素,hasNext方法返回的是一个布尔值,判断迭代器中是否还有元素,有就打印,没有就跳出循环while (i.hasNext()){System.out.println(i.next());}//集合遍历方式2:for-each循环for (int j:list) {System.out.println(j);}}

在这里插入图片描述

迭代器的核心思想

迭代器的核心思想是:将多个接口转移到一个接口上。 假如我们有List、Set、 ArrayList等100个集合,如果不使用迭代器的话,我们就需要掌握100种遍历集合的方法,但是如果有了迭代器,我们就可以将这些集合封装成迭代器,只需要掌握如何遍历迭代器,就可以遍历想要的元素。

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)


http://www.ppmy.cn/devtools/144884.html

相关文章

调用钉钉接口发送消息

调用钉钉接口发送消息 通过创建钉钉开放平台创建H5小程序&#xff0c;通过该小程序可以实现向企业内的钉钉用户发送消息&#xff08;消息是以工作通知的形式发送&#xff09; 1、目前仅支持发送文本消息&#xff0c;相同内容的文本只能成功发送一次&#xff0c;但是接口返回发…

一起学Git【第一节:Git的安装】

Git是什么&#xff1f; Git是什么&#xff1f;相信大家点击进来已经有了初步的认识&#xff0c;这里就简单的进行介绍。 Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds创建&#xff0c;用于有效、高速地处理从小到大的项目版本管理。Git是目前世界上最流行…

王佩丰24节Excel学习笔记——第十六讲:简单文本函数

【以 Excel2010 系列学习&#xff0c;用 Office LTSC 专业增强版 2021 实践】 【本章小技巧】 如果已知要取数据的固定起始位&#xff0c;可使用此小技巧&#xff0c;如&#xff1a;MID(A3,4,100)&#xff0c;知道从第4位取&#xff0c;后面不知道有多少&#xff0c;我就多取&…

springmvc的拦截器,全局异常处理和文件上传

拦截器: 拦截不符合规则的&#xff0c;放行符合规则的。 等价于过滤器。 拦截器只拦截controller层API接口。 如何定义拦截器。 定义一个类并实现拦截器接口 public class MyInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest reque…

实现路由懒加载的方式有哪些?

1函数式懒加载 使用vue的异步组件和webpack的代码分割功能&#xff0c;通过&#xff08;&#xff09;>import()这种函数形式来定义路由组件&#xff0c;示例如下&#xff1a; const Home () > import(/views/Home.vue); const router new VueRouter({routes: [{ path…

RFdiffusion get_torsions函数解读

函数功能 get_torsions 函数根据输入的原子坐标(xyz_in)和氨基酸序列(seq),计算一组主链和侧链的扭转角(torsions)。同时生成备用扭转角(torsions_alt),用于表示可以镜像翻转的几何结构,并返回掩码(tors_mask)和是否平面化(tors_planar)的信息。 输入参数 xyz…

安卓开发实现图像处理相关功能

彩色图像转换黑白图像实验 基本图形绘制与填充实验 Mat像素操作实验 图像滤波实验 图像轮廓特征检测实验 图像局部特征检测实验 人脸美颜

websocket 局域网 webrtc 一对一 多对多 视频通话 的示例

基本介绍 WebRTC&#xff08;Web Real-Time Communications&#xff09;是一项实时通讯技术&#xff0c;它允许网络应用或者站点&#xff0c;在不借助中间媒介的情况下&#xff0c;建立浏览器之间点对点&#xff08;Peer-to-Peer&#xff09;的连接&#xff0c;实现视频流和&am…