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

迭代器模式Iterator

  • 定义迭代器的接口,以及对应的hasNext以及next方法
    • 注意定义的时候使用泛型,不然接口方法的返回值只能是Object,实际使用的时候还需要强制转换
  • 在被迭代的接口里面定义获取迭代器的方法
    • 注意使用泛型
  • 在需要被迭代的对象里面实现一个具体迭代器,专属于这个对象的迭代器以及对应的迭代方法,每一个对象的迭代遍历的方法应该是不一样
    • 注意实现被迭代接口的时候标注的泛型依旧是被迭代对象
    • public class MyArrayList<E> implements MyCollection<E>

实现(注意适应泛型)

定义迭代器的抽象方法

package com.deltaqin.designPattern.d06_iterator;/*** @author deltaqin* @date 2021/3/27 10:38 上午*/
public interface MyIterator<T> {boolean hasNext();T next();
}

定义集合的抽象方法

package com.deltaqin.designPattern.d06_iterator;/*** @author deltaqin* @date 2021/3/27 10:39 上午*/
public interface MyCollection<E> {void add(E e);int size();MyIterator myiterator();
}

在集合内部实现迭代器的具体逻辑

package com.deltaqin.designPattern.d06_iterator;/*** @author deltaqin* @date 2021/3/27 10:40 上午*/
public class MyArrayList<E> implements MyCollection<E>{private E[] objects = (E[])new Object[10];private int size = 0;public void add(E e) {if (size+1 < objects.length) {E[] objectTmp = (E[])new Object[objects.length * 2];System.arraycopy(objects,0,objectTmp,0,objects.length);objects = objectTmp;}objects[size++] = e;}@Overridepublic int size() {return size;}@Overridepublic MyIterator myiterator() {return new ArrayListIterator<E>();}class ArrayListIterator<E> implements MyIterator<E> {private int index = 0;@Overridepublic boolean hasNext() {return index < size;}@Overridepublic E next() {E e = (E) objects[index++];return e;}}
}

测试

package com.deltaqin.designPattern.d06_iterator;/*** @author deltaqin* @date 2021/3/27 10:33 上午*/
public class Demo {public static void main(String[] args) {MyCollection<String> myCollection = new MyArrayList<>();myCollection.add("delta0");myCollection.add("delta1");myCollection.add("delta2");myCollection.add("delta3");MyIterator myiterator = myCollection.myiterator();while (myiterator.hasNext()) {System.out.println(myiterator.next());}}
}
http://www.hskmm.com/?act=detail&tid=31214

相关文章:

  • WebStorm的安装与使用
  • WinCC Unified必备设置
  • Lexical Feature engineering
  • 面向对象进阶
  • OAuth2.0思维导图总结以及认证平台流程图
  • InCopy 2025安装教程(安装包)IC2025免费版下载安装教程
  • 材料可视化 | Violin Plot小提琴图Python实现 数据分布密度可视化科研图表
  • ApacheMapStruct常用总结
  • 《数学之美》读后感,简单之美——布尔代数和搜索引擎
  • JSON字符串转换为Map
  • fastjson
  • 2025/10/14 模拟赛总结 - sb
  • HEAD以及分离头指针
  • git思维导图总结
  • Python 并发编程:concurrent.futures
  • ZR3365
  • 记一次因对象构造顺序引发的踩内存问题
  • 恒流电路的震荡问题
  • 六维力传感器材质选择:影响性能与精度的关键因素 - 实践
  • C尖笔记
  • 浅谈自学习编程以来学到的代码规范
  • Jenkins Share Library教程 —— 高级实战与最佳实践教程
  • qoj.6555 Sets May be Good 做题记录
  • 结构化数据自动生成文本技术解析
  • CSharp: Aspose.CAD 25.10 Convert DWG and DXF to PDF
  • vtk学习——Pipeline
  • 长沙四大名校x东方project
  • Rust 的英文数字验证码识别系统设计与实现
  • IOS开发 - UIViewController 界面控制基类解析
  • SpringBoot运维实用篇(YW-1.SpringBoot程序的打包与运行,YW-2.配置高级,YW-3.多环境开发,YW-4.日志) - a