行为型(五) - 迭代器模式

news2024/10/7 10:22:35

一、概念

迭代器模式(Iterator Pattern):迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。

通俗的讲:迭代器模式就是提供一种遍历的方法,这种方法有两个特点:一是按你想要的方式访问到你想访问的元素,二是不暴露底层是什么存的。

大部分编程语言都提供了遍历容器的迭代器类,我们在平时开发中,直接拿来用即可,几乎不大可能从零编写一个迭代器。

二、实现

这里实现一个简单字符串迭代器:

1、迭代器接口

public interface Iterator<E> {
    boolean hasNext();
    void next();
    E getCurrentItem();
}

2、实现迭代器

public class ArrayIterator<E> implements Iterator<E> {
    private int index;
    private ArrayList<E> arrayList;

    public ArrayIterator(ArrayList<E> list) {
        this.arrayList = list;
    }

    @Override
    public boolean hasNext() {
        return index != arrayList.size();
    }

    @Override
    public void next() {
        index++;
    }

    @Override
    public E getCurrentItem() {
        return arrayList.get(index);
    }
}

3、测试类

public class Client {
    public static void main(String[] args) {
        ArrayList<String> nameList = new ArrayList<>();
        nameList.add("Jay");
        nameList.add("Jason");
        nameList.add("Daniel");
        
        ArrayIterator iterator = new ArrayIterator(nameList);
        while (iterator.hasNext()) {
            String name = (String) iterator.getCurrentItem();
            System.out.println(name);
            iterator.next();
        }
    }
}

4、运行结果
迭代器模式结果.png

总结:对于类似数组和链表这样的数据结构,遍历方式比较简单,在原来的类中实现也可以。但是,对于复杂的数据结构(比如树、图)来说,有各种复杂的遍历方式。比如,树有前中后序、按层遍历,图有深度优先、广度优先遍历等等。如果将这部分遍历的逻辑写到容器类中,也会导致容器类代码的复杂性,所以统一将遍历操作拆分到迭代器类中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/916130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卡马A1/B1和VEAZEN费森S88怎么样?有什么优缺点?综合对比评测哪一款更适合初学者/进阶者购买?

每个吉他爱好者应该都想拥有一把全单吉他&#xff0c;毕竟全实木的民谣吉他会有更好的声音爆发力和更细腻的音色&#xff0c;在入门和进阶全单吉他中&#xff0c;经常收到私信询问这两款VEAZEN费森S88系列和KEPMA卡马A1系列这两款全单吉他怎么样&#xff1f; 卡马A1/B1和VEAZE…

【LangChain系列 1】 LangChain初探

原文链接&#xff1a;【LangChain系列 1】LangChain初探https://mp.weixin.qq.com/s/9UpbM84LlsHOaMS7cbRfeQ 本文速读&#xff1a; LangChain是什么 LangChain初探 环境准备 LLMs Prompt Templates Output Parser 第一个LLMChain应用 01 LangChain是什么 LangChain是一…

Linux socket网络编程

一、主机字节序列和网络字节序列 主机字节序列分为大端字节序列和小端字节序列&#xff0c;不同的主机采用的字节序列可能不同。大端字节序列是指一个整数的高位字节存储在内存的低地址处&#xff0c;低位字节存储在内存的高地址处。小端字节序列是指整数的高位字节存储在内存…

Prometheus+Grafana+AlertManager监控Linux主机状态

文章目录 PrometheusGrafanaAlertManager监控平台搭建开始监控Grafana连接Prometheus数据源导入Grafana模板监控Linux主机状态 同系列文章 PrometheusGrafanaAlertManager监控平台搭建 Docker搭建并配置Prometheus Docker拉取并配置Grafana Docker安装并配置Node-Exporter …

ChatGPT取代人类仍然是空想?有没有一种可能是AI在迷惑人类

ChatGPT自从去年发布以来&#xff0c;就掀起了这些大语言模型将如何颠覆一切的激烈讨论&#xff0c;从为学生写作文、输出SEO文章&#xff0c;甚至取代谷歌成为世界上最受欢迎的搜索引擎&#xff0c;影响领域无所不包&#xff0c;甚至可能取代编剧、小说家和音乐家等从事创意工…

spring复习:(57)PropertyOverrideConfigurer用法及工作原理

一、属性配置文件 dataSource.urljdbc:mysql://xxx.xxx.xxx.xxx/test dataSource.usernameroot dataSource.passwordxxxxxx dataSource.driverClassNamecom.mysql.jdbc.Driver #dataSource.typecom.alibaba.druid.pool.DruidDataSource二、spring配置文件 <?xml version&…

C++STL之vector 容器

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a;C基础 ♈️今日夜电波&#xff1a;恋 —星野源 0:13 ━━━━━━️&#x1f49f;──────── 4:13 &…

亚马逊自动下单软件是怎么操作的?

如果需要亚马逊自动下单软件&#xff0c;那么首选肯定是亚马逊鲲鹏系统&#xff0c;亚马逊鲲鹏系统是一款模拟真人进行全自动化操作的软件&#xff0c;可以注册亚马逊买家号、养号、自动下单留评等&#xff0c;功能非常的齐全。 要进行下单&#xff0c;那么首先我们就需要有一批…

司空见惯 - Feasycom公司介绍(飞易通)

网址&#xff1a; Feasycom IOT Modules Feasycom 是一家专注于物联网产品和服务研发的公司。他们专注于蓝牙模块、Wi-Fi 和 LoRa 技术。Feasycom 为物联网连接提供一站式解决方案&#xff0c;提供自己的蓝牙和 Wi-Fi 协议栈实施方案。他们拥有一系列产品&#xff0c;包括可在…

剑指Offer07.重建二叉树 C++

1、题目描述 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例1&#xff1a; Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7] Output: [3,9,20,null,null,15,7] …

2023年国赛 高教社杯数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…

Gin框架入门

介绍 Gin是一个golang的微框架&#xff0c;封装比较优雅&#xff0c;API友好&#xff0c;源码注释比较明确&#xff0c;具有快速灵活&#xff0c;容错方便等特点 对于golang而言&#xff0c;web框架的依赖要远比Python&#xff0c;Java之类的要小。自身的net/http足够简单&…

国标视频云服务EasyGBS国标平台进行内网映射两个公网设备配置的详细步骤

国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入&#xff0c;并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#xff0c;分发的视频…

无涯教程-PHP - 标量函数声明

在PHP 7中&#xff0c;引入了一个新函数&#xff0c;即标量类型声明。标量类型声明有两个选项- Coercive - 强制性是默认模式。Strict - 严格模式必须明确提示。 可以使用上述模式强制执行以下类型的函数参数- intfloatbooleanstringinterfacesarraycallable 强制模…

686. 重复叠加字符串匹配

686. 重复叠加字符串匹配 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;__686重复叠加字符串匹配__暴力解法__直接调用函数__686重复叠加字符串匹配__KMP算法 原题链接&#xff1a; 686. 重复叠加字符串匹配 https://leetcode.cn/prob…

vue 简单实验 自定义组件 综合应用 传参数 循环

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"todo-list-app"><ol><!--现在我们为每个 todo-item 提供 todo 对象todo 对象是变量&#xff0c;即其内容可以是动态的。…

Python Pandas 提取csv数据再合并

文章目录 需求思路&#xff1a;步骤伪代码 需求 从不同的csv文件中提取相同的列&#xff0c;然后合并成一个csv 假设有这样一张csv&#xff0c; column A&#xff0c; B&#xff0c; C, D 的数据分别来自a.csv, b.csv, c.csv, d.csv指定的某一列数据。 Title 列的Items是之前…

【自动驾驶】TI SK-TDA4VM 开发板上电调试,AI Demo运行

1. 设备清单 TDA4VM Edge AI 入门套件【略】USB 摄像头(任何符合 V4L2 标准的 1MP/2MP 摄像头,例如:罗技 C270/C920/C922)全高清 eDP/HDMI 显示屏最低 16GB 高性能 SD 卡连接到互联网的 100Base-T 以太网电缆【略】UART电缆外部电源或电源附件要求: 标称输出电压:5-20VDC…

无线路由器实现网络接入

目录 简介 1. 常见的接人互联网方式及设备 2.常见的接入互联网方式比较 2.2接入互联网设备 简介 随着IT技术的不断发展&#xff0c;一些中小型企业和家庭用户对网络带宽的需求越来越高。而传统的接入互联网方式虽然价格便宜&#xff0c;但是其稳定性受线路等其他因素影响。因…

轻松搭建远程Node.js服务端,让你的应用在公共网络中畅行无阻!

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…