03-JAVA设计模式-迭代器模式

迭代器模式

什么是迭代器模式

迭代器模式(demo1.Iterator Pattern)是Java中一种常用的设计模式,它提供了一种顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示的方法。迭代器模式将遍历逻辑从聚合对象中分离出来,使得聚合对象本身更加简洁,同时也使得遍历操作更加灵活和独立。

在Java中,迭代器模式通常通过实现Iterator接口来实现。
Iterator接口定义了访问和遍历元素的方法,如hasNext()用于判断是否还有下一个元素,next()用于获取下一个元素等。

迭代器模式的主要优点包括:

  • 它支持以不同的方式遍历一个聚合对象。
  • 迭代器简化了聚合对象的接口。
  • 在同一个聚合上可以有多个遍历。
  • 在遍历的同时更改聚合对象结构是安全的。

需要注意的是,Java集合框架(Collections Framework)已经内置了迭代器模式,因此在实际开发中,我们通常会直接使用Java集合类提供的迭代器,而不需要手动实现迭代器接口。例如,ArrayList、HashSet等类都实现了Iterable接口,可以通过iterator()方法获取迭代器。

案例

实现逆向迭代

UML

在这里插入图片描述

实现步骤:

  • 定义迭代器接口Iterator类,类中定义判断是否还有下一个及获取下一个数据的接口
  • 定义接口实现类ReverseIterator,类中定义集合List 用于存储数据,定义游标属性用于获取当前集合所在位置, 然后实现Iterator接口

实现代码

Iterator.java

// 定义迭代器接口
public interface Iterator {boolean hasNext();Object next();
}

ReverseIterator.java

import java.util.List;// 逆向迭代器具体实现方案
public class ReverseIterator implements Iterator{// 定义存储数据private List<Object> items;// 游标由于遍历private int position = 0;public ReverseIterator(List<Object> items) {this.items = items;}@Overridepublic boolean hasNext() {return position < items.size();}@Overridepublic Object next() {position++;return items.get(items.size() - position);}
}

TestClient.java

public class TestClient {public static void main(String[] args) {List<Object> list = new ArrayList<Object>();list.add("1");list.add("2");list.add("3");ReverseIterator reverseIterator = new ReverseIterator(list);while(reverseIterator.hasNext()){System.out.println(reverseIterator.next());}}
}

执行结果:
在这里插入图片描述

gitee源码

git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git

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

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

相关文章

IP地址归属地与旅游业应用

在当今数字化时代&#xff0c;IP地址归属地已成为许多行业的重要工具&#xff0c;其中包括旅游业。IP地址归属地是指将特定IP地址与其地理位置相关联的过程。在旅游业中&#xff0c;利用IP地址归属地可以提供多种应用&#xff0c;从客户定位到个性化推广&#xff0c;以及旅游数…

树--排序二叉树的删除

一、二叉排序树的删除 二叉排序树的删除情况比较复杂&#xff0c;有以下三种情况需要考虑。 删除叶子节点 &#xff08;比如&#xff1a;2,5,9,10&#xff09;删除只有一个子树的节点&#xff08;比如&#xff1a;1&#xff09;删除有两个子树的节点 &#xff08;比如&#x…

YAPI第一次创建项目

黑马程序员JavaWeb开发教程 文章目录 1、添加项目2、添加分类3、添加接口 1、添加项目 2、添加分类 3、添加接口

用通俗易懂的语言来解释开源软件各种协议的区别

开源软件协议是一系列法律文本&#xff0c;它们规定了人们如何使用、修改和分发开源代码。这些协议确保软件可以自由地被他人利用&#xff0c;同时保护原作者的权益和软件的开放性。以下是几种常见开源协议的通俗解释&#xff1a; 1. GNU 通用公共许可证&#xff08;GPL&#…

wsl2的ubuntu22.04中安装ros2

1、设置编码 sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8 2、hosts文件中添加域名解析 vim /etc/hosts 199.232.96.133 raw.githubusercontent.com 199.232.96.133 raw.github.com 3、设置软件源 su…

avue中增删改功能hook提取

再avue使用中&#xff0c;我们会进场用到表格的增删改功能&#xff0c;我们写一个公共的hooks&#xff0c;然后只需要对请求的方法&#xff0c;参数的前后处理&#xff0c;就可以统一生成 import type { AxiosPromise } from "axios"; import type { Ref } from &qu…

数据结构:线性表————单链表专题

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

STM32的GPIO端口的八种模式解析

目录 STM32的GPIO端口的八种模式解析 一、上拉输入模式 二、下拉输入模式 三、浮空输入模式 四、模拟输入模式 五、推挽输出模式 六、开漏输出模式 七、复用推挽输出模式 八、复用开漏输出模式 STM32的GPIO端口的八种模式解析 在学习STM32的过程中&#xff0c;GPIO端口…

最全面的多语言同城送餐app开发流程解析

在当今数字化时代&#xff0c;随着移动互联网的普及和人们生活水平的提高&#xff0c;多语言同城送餐app开发成为各大企业争相布局的热门领域。本文将从专家的视角出发&#xff0c;为您详细解析最全面的多语言同城送餐app开发流程&#xff0c;助您在激烈的竞争中脱颖而出。 多…

mysql not in 和 null

in语句不会对null进行过滤匹配 not in语句后面的范围不能出现null&#xff0c;否则执行无效&#xff0c;如果后面是子查询&#xff0c;则需要手动增加is not null过滤条件 力扣题目链接 本题中如果将第二个case中的in改成not in&#xff0c;因为目标中有null 则会直接跳过第二…

使用colab进行yolov5小demo练习

输入一张动物的图片进行目标检测和分类 !pip install yolov5 import torch from PIL import Image from torchvision import transforms from yolov5.models.experimental import attempt_load from yolov5.utils.general import non_max_suppression# 加载YOLOv5模型 device …

婴儿专用洗衣机哪个牌子比较好?四款品质婴儿洗衣机暖心安利

科技让我们的生活变得方便了许多&#xff0c;比如&#xff0c;自从有了婴儿洗衣机之后&#xff0c;有些人就改变了宝宝衣物必须要手洗的想法&#xff0c;许多研究也证明&#xff0c;单靠手洗是无法将宝宝衣物彻底清洗干净的&#xff0c;一台专门的洗衣机就可以减轻我们的负担&a…

【MySQL笔记】InnoDB的插入缓存+非聚簇索引插入的离散性理解

文章目录 为什么需要插入缓存Insert Buffer非聚簇索引插入的离散性 Insert Buffer查看Insert Buffer信息 Insert Buffer的问题Change Buffer总结Reference 为什么需要插入缓存Insert Buffer 磁盘中的主键索引由于天然自增&#xff0c;无须磁盘的随机 I/O&#xff0c;只需不断追…

聚观早报 | 2024款蔚来ET7将发布;魏建军直播测试长城汽车

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月16日消息 2024款蔚来ET7将发布 魏建军直播测试长城汽车 Redmi Turbo 3开启销售 华为P系列正式升级为华为Pura…

Script file ‘D:\Anaconda\Scripts\pip-script.py‘ is not present.

报错解释&#xff1a; 这个错误表明系统尝试执行的脚本文件 D:\Anaconda\Scripts\pip-script.py 不存在。这通常发生在尝试使用 pip 时&#xff0c;但 pip 没有正确安装或者路径设置不正确时。 解决方法&#xff1a; 确认 pip 是否已经安装在 Anaconda 中。可以通过 Anaconda…

数据采集1688官方API商品数据采集1688官方商品详情数据返回|电商API接口数据采集

随着全球经济一体化和电子商务的快速发展&#xff0c;网络购物的需求日益增加。不断涌现的电商企业使得行业的竞争情况愈演愈烈。在这种情况下&#xff0c;企业不仅要加大经营力度&#xff0c;还要在自己的基础设施和技术上持续投入&#xff0c;才能更好的适应市场和消费习惯。…

开春运动正当时,谨防这些运动损伤,别让“健身”变“伤身”

春季运动正当时 运动损伤需警惕 科学运动 快乐加倍 天气回升&#xff0c;春暖清明 户外运动爱好者纷纷复出 但要注意的是 春季是运动受伤的高发季 因为经过寒冷冬季的“运动低潮期”&#xff0c;身体各器官的季节活跃性较低&#xff0c;运动方式和强度不合适很容易导致身体…

【华为OD机试C++】蛇形矩阵

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例代码描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形…

C++(运算符重载+赋值拷贝函数+日期类的书写)

目录 运算符重载运算赋值重载和运算赋重载前置和后置<,<,>,>,,!运算符重载日期类的实现<<流插入和>>流提取的运算符重载总结 运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也具有其 返回…

(最新)华为 2024 届实习招聘-硬件通⽤/单板开发——第十一套和十二套

&#xff08;最新&#xff09;华为 2024 届实习招聘-硬件通⽤/单板开发——第十一套和十二套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff…