Java设计模式-迭代器模式Iterator

【Java设计模式】Java设计模式之(八)迭代器模式(Iterator Pattern) 本文目录 一、迭代器概述 1.1 优缺点 1.2 使用场景 1.3 注意事项 二、代码实现 2.1 通用类图 2.2 代码实现 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。迭代器模式属于行为型模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 一、迭代器概述 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 主要解决:不同的方式来遍历整个整合对象。 何时使用:遍历一个聚 阅读详情

在这里插入图片描述

介绍

根据GoF的定义,迭代器模式提供了一种顺序访问聚合对象的元素而不暴露其底层表示的方法。这是一种行为设计模式。

顾名思义,迭代器有助于以定义的方式遍历对象集合,这对客户端应用程序很有用。在迭代期间,客户端程序可以根据需求对元素执行各种其他操作。

原理类图

在这里插入图片描述
迭代器模式的角色说明如下:

  • Iterator:访问或遍历元素集合的接口。提供具体迭代器必须实现的方法。

  • ConcreteIterator:实现Iterator接口方法。它还可以跟踪聚合集合遍历中的当前位置。

  • Aggregate:它通常是一个集合接口,它定义了一个可以创建迭代器对象的方法。

  • ConcreteAggregate:它实现Aggregate接口,其特定方法返回- -ConcreteIterator的实例。

什么时候使用?

每种编程语言都支持一些数据结构,如列表或映射,用于存储一组相关对象。在Java中,我们有List、Map和Set接口及其实现,如ArrayList和HashMap。

只有当集合提供了访问其元素而不暴露其内部结构的方法时,它才有用。迭代器承担这一责任。

因此,无论何时,我们都有对象集合,并且客户端需要一种方法以适当的顺序迭代每个集合元素,我们必须使用迭代器模式来设计解决方案。

迭代器模式允许我们以如下方式设计集合迭代器:

  • 我们能够访问集合的元素,而不暴露元素的内部结构或集合本身。
  1. 迭代器支持在向前、向后或两个方向上从开始到结束对集合进行多次同时遍历。

  2. 迭代器为透明地遍历不同的集合类型提供了统一的接口。

JDK中的实现

在Java中,我们有Java.util.Iterator接口及其特定的实现,例如ListIterator。所有Java集合都提供了Iterator接口的一些内部实现,该接口用于迭代集合元素。

List<String> names = Arrays.asList("alex", "brian", "charles");
       
  Iterator<String> namesIterator = names.iterator();
   
  while (namesIterator.hasNext()) 
  {
    String currentName = namesIterator.next();
     
    System.out.println(currentName);
}

实战案例

在这个迭代器模式示例中,我们正在创建一个集合,该集合可以保存Topic类的实例,并将提供一个迭代器来按顺序迭代Topic集合。

public class Topic 
{
  private String name;
   
  public Topic(String name) {
    super();
    this.name = name;
  }
 
  public String getName() {
    return name;
  }
 
  public void setName(String name) {
    this.name = name;
  }
}
public interface Iterator<E> 
{
  void reset(); // reset to the first element
 
  E next(); // To get the next element
 
  E currentItem();  // To retrieve the current element
 
  boolean hasNext();  // To check whether there is any next element or not.
}
public class TopicIterator implements Iterator<Topic> {
   
  private Topic[] topics;
    private int position;
     
    public TopicIterator(Topic[] topics)
    {
        this.topics = topics;
        position = 0;
    }
 
  @Override
  public void reset() {
    position = 0;
  }
 
  @Override
  public Topic next() { 
    return topics[position++];
  }
 
  @Override
  public Topic currentItem() {
    return topics[position];
  }
 
  @Override
  public boolean hasNext() {
    if(position >= topics.length)
            return false;
        return true;
  }
}
public interface List<E>
{
  Iterator<E> iterator();
}
public class TopicList implements List<Topic>
{
  private Topic[] topics;
   
    public TopicList(Topic[] topics)
    {
        this.topics = topics;
    }
     
  @Override
  public Iterator<Topic> iterator() {
    return new TopicIterator(topics);
  }
}
public class Main 
{
  public static void main(String[] args) 
  {
    Topic[] topics = new Topic[5];
    topics[0] = new Topic("topic1");
    topics[1] = new Topic("topic2");
    topics[2] = new Topic("topic3");
    topics[3] = new Topic("topic4");
    topics[4] = new Topic("topic5");
     
    List<Topic> list = new TopicList(topics);
     
    Iterator<Topic> iterator = list.iterator();
     
    while(iterator.hasNext()) {
      Topic currentTopic = iterator.next();
      System.out.println(currentTopic.getName());
    }
  }
}
  • 程序输出:
    在这里插入图片描述
黑金AXU9EG开发板深度学习部署全流程解析 本文详细解析了黑金AXU9EG开发板的深度学习模型部署全流程,从环境搭建、模型转换到上板验证,提供了实用的技术指导和优化技巧。该开发板基于Xilinx Zynq UltraScale+ MPSoC架构,特别适合边缘计算场景,通过FPGA加速实现高效AI推理。 阅读详情

相关推荐

关于无障碍适配的笔记

针对无障碍兼容性的笔记,针对wcg2.0/2.1

CoffeeAndIce的博客 4218

Java 设计模式——迭代器模式

本文介绍了迭代器模式的相关知识。

代码星辰的博客 2957

SuperPoint与SuperGlue的C++ TensorRT工程化实战:从理论到部署的完整指南

本文详细介绍了如何将SuperPoint和SuperGlue算法通过C++和TensorRT进行工程化部署,从模型准备、格式转换到TensorRT引擎构建和C++推理实现。通过性能优化技巧和实际应用案例,展示了在边缘设备上实现实时特征匹配的完整流程,显著提升处理速度与效率。

weixin_42537831的博客 161

JAVA设计模式之迭代器模式详解

迭代器模式是我们学习一个设计时很少用到的、但编码实现时却经常使用到的行为型设计模式。在绝大多数编程语言中,迭代器已经成为一个基础的类库,直接用来遍历集合对象。在平时开发中,我们更多的是直接使用它,很少会从零去实现一个迭代器。迭代器模式(Iterator pattern)又叫游标(Cursor)模式,它的原始定义是:迭代器提供一种对容器对象中的各个元素进行访问的方法,而又不需要暴露该对象的内部细节。

励志成为一名优秀的全能型软件开发工程师。 1746

Transformer是什么?看完这篇你就醍醐灌顶

前言 由谷歌团队提出的预训练语言模型BERT近年来正在各大自然语言处理任务中屠榜(话说学者们也挺有意思的,模型名都强行凑个芝麻街的人物名,哈哈哈)。 BERT算法的最重要的部分便是Transformer的概念,它本质上是Transformer的编码器部分。 而Transformer是什么呢?transformer是永远的神,自从transformer使用了抛弃rnncnn的纯attention机制之后,各种基于transformer结构的预训练模型都如雨后春笋般雄起,而transformer中最重要就是使用

fs1341825137的博客 6万+

详细介绍pytorch重要的API

Tensor 是 PyTorch 中最基本的数据结构,提供了多种创建和操作张量的函数。Autograd 提供了自动求导功能,可以跟踪 Tensor 上的操作并计算梯度。损失函数用于衡量模型预测值与真实值之间的差异,提供了多种损失函数。是构建神经网络的基础类,提供了定义网络层和前向传播的方法。提供了 GPU 计算的支持,包括设备管理、内存管理等。提供了一些常用的函数式操作,如激活函数、损失函数等。提供了常用的数据集、模型架构和图像转换工具。提供了数据加载和预处理的工具,包括。

hello! 1223

Java迭代器模式详解

/ 树节点// 创建深度优先迭代器// 创建广度优先迭代器// 深度优先迭代器return!i >= 0;i--) {需要统一遍历不同结构的集合需要支持多种遍历方式需要隐藏集合内部实现需要延迟加载或分批处理数据Java集合框架(Collection.iterator())数据库结果集遍历树形结构遍历文件系统遍历分页数据加载正确使用迭代器模式可以提高代码的复用性和灵活性,但对于简单遍历需求,直接使用for循环可能更简洁。

weixin_52242569的博客 547

用InVEST做碳中和规划?手把手教你计算城市碳储量与热岛效应

本文详细介绍了如何利用InVEST模型进行城市碳中和规划的科学评估。通过手把手教学,演示了如何使用该模型的碳存储与城市热岛缓解模块,从数据准备、模型运行到结果解读,量化评估不同规划方案下的碳储量变化与热岛效应缓解潜力,为城市规划者提供科学的决策依据。

weixin_29201313的博客 822

Java--Iterator迭代器(集合的遍历)

💎本文讲述了iterator,ListItor接口的使用及实现原理,使用迭代器报错ConcurrentModificationException可以来看下原因及解决方案

rbx508780的博客 2万+

【华为OD机试】贪吃蛇(python, java, c++, js)

贪吃蛇是一个经典游戏,蛇的身体由若干方格连接而成,身体随蛇头移动。蛇头触碰到食物时,蛇的长度会增加一格。蛇头和身体的任一方格或者游戏版图边界碰撞时,游戏结束。 下面让我们来完成贪吃蛇游戏的模拟。 给定一个NM的数组arr,代表NM个方格组成的版图,贪吃蛇每次移动一个方格。 若arr[i][j] == H,表示该方格为贪吃蛇的起始位置; 若arr[i][j] == F,表示该方格为食物, 若arr[i][j] == E,表示该方格为空格。 贪吃蛇初始长度为1,初始移动方向为向左。

A_D_I_D_A_S的博客 541

【AI Agent】Harness Engineering实践

Harness(运行宿主)是围绕 LLM构建的一套确定性工程系统,其核心职责是:承认模型的固有局限,用可控的工程手段逐一弥补,使"强大但不可靠的推理引擎"变成"可信赖的生产级Agent"模型 是发动机——提供原始动力Agent 是驾驶员——做出决策Harness 是道路、地图、护栏、仪表盘、维修站和质检线——确保行驶安全有序没有Harness,模型越强,可能只是更快地制造混乱。

sysu_lluozh 192

Java设计模式之行为型:迭代器模式

迭代器模式提供一种访问集合中的各个元素,而不暴露其内部表示的方法。将在元素之间游走的职责交给迭代器,而不是集合对象,从而简化集合容器的实现,让集合容器专注于在它所应该专注的事情上,更加符合单一职责原则。

张维鹏的博客 1万+

computer planetary——全球生物多样性信息机构 (GBIF)

正如npartitions所表明的,这个Parquet数据集是由许多单独的parquet文件组成的。(GBIF) 是一个由世界各国政府资助的国际网络和数据基础设施,提供记录物种发生的全球数据。重新处理数据的原因有多种,包括主干分类的更改,因此该日期不一定是发生记录最后更改的日期。GBIF 发生数据集结合了来自广泛来源的数据,包括来自自然历史博物馆的标本相关数据、来自公民科学网络的观察和自动环境调查。为了了解最常观察到的物种,我们将对数据集进行分组,并获得每个物种的计数。大多数字段名称对应于。

此星光明博客 1636

JAVA设计模式之 迭代器模式【Iterator Pattern】

一、概述     提供一种方法来访问聚合对象(容器container),而不用暴露这个对象的内部细节。 二、适用场景     1>遍历访问聚合对象中的元素,而无须暴露它的内容表示,将聚合对象的访问和内部数据的存储分离。使得访问聚合对象时无须了解其内部的实现细节。     2>需要为一个聚合对象提供多种遍历实现。 三、UML类图 四、参与者  1>Ite

小吕丶Code阶区 1941

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java设计模式——迭代器模式【Iterator Pattern】

Java设计模式、迭代器模式、Iterator Pattern

scorpio的博客 503

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java设计模式之迭代器模式(Iterator Pattern)

Java设计模式之迭代器模式(Iterator Pattern)

慕白Lee的博客 498

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java设计模式---迭代器模式(iterator pattern)

java设计模式—迭代器模式(iterator pattern) 1. 概述 可以存储多个成员对象(元素),这些类通常称为聚合类(Aggregate Classes),对应的对象称为聚合对象。为了更加方便地操作这些聚合对象,同时可以很灵活地为聚合对象增加不同的遍历方法,可以访问一个聚合对象中的元素但又不需要暴露它的内部结构。这就是接下来我们将要学习的迭代器模式,通过引入迭代器,客户端无须了解聚...

渔潭的博客 3181

Java设计模式之 Iterator 迭代器模式

Java设计模式之 Iterator 迭代器模式 设计模式本身就是一门玄学,看不懂很正常,一次看懂就不是很正常了,多看多练才是关键 int [] array = {1 , 2 , 3 , 4 , 5 , 6}; for(int i = 0;i < array.length;i++) { System.out.println(array[i]); } 看这个代码是不是平平无奇,是的,它就是平平无奇的遍历和输出而已,其中变量 i 的作用就是确定当前对数组的索引,然后将这里的循环变量i的作用抽象化

qq_45108095的博客 262

设计模式之迭代器模式Iterator Pattern详解Java版

一、定义 The Iterator Pattern provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation. 迭代器模式在不暴露底层实现的情况下,提供了一种访问聚合对象的各个元素的方法。 二、实例 有两个班级,一班使用了ArrayList来管理学生信息,二班使用了数组Array来管理学生信息,现有学生信息调查小组来对两个班

qianmojl的博客 393

Java设计模式 二十二 迭代器模式 (Iterator Pattern)

迭代器模式通过提供一个统一的接口来遍历集合对象中的元素,将遍历的逻辑从集合类中分离出来,使得客户端代码不再直接依赖于集合的实现。它可以提高代码的灵活性和可维护性,尤其适用于集合对象需要频繁访问和遍历的场景。不过,迭代器模式可能会增加类的数量,因此需要根据实际需求权衡是否使用该模式。

空 550

Java设计模式--迭代器模式【Iterator Pattern】

在Java中,因为从JDK 1.2 版本开始增加java.util.Iterator 这个接口,并逐步把Iterator 应用到各个聚集类(Collection)中,我们来看JDK 1.5 的API 帮助文件,你会看到有一个叫java.util.Iterable 的接口,有许多接口继承了它。java.util.Iterable 接口只有一个方法:iterator(),也就说通过iterator()

CoderLover 415

java设计模式(二十)迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern)的模式介绍,应用场景说明,优缺点说明以及代码示例讲解

weixin_70044963的博客 443

JAVA设计模式第八章:迭代器模式(Iterator Pattern)

java设计模式之迭代器模式,java中ArrayList的迭代器模式

Asparrow的博客 361

java 23 种设计模式-17-java 迭代器模式(Iterator Pattern)

目录 目录 迭代器模式 实际案例 定义 测试 实现方式 UML &amp; Code UML Code 系列导航 迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 实际案例 类信息概览: ...

3万+

java设计模式——迭代器模式(Iterator Pattern)

概述:         在软件开发中,我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。因此,可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为“迭代器”的对象中,由迭代器来提供遍历聚合对象内部数据的行为,这将简化聚合对象的设计,更符合“单一职责原则”的要求。 定义:提

yj_android_develop的博客 519

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 迭代器模式(Iterator) - Java实现

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 迭代器模式(Iterator) 提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

Z 376
上一篇: Java 23种设计模式的分类和使用场景
下一篇: Java设计模式-观察者模式Observer
罗汉爷
罗汉爷 新星创作者: Java技术领域 新星创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄14年 4912粉丝 605原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值