详解java迭代器模式

 更新时间:2019年05月16日 10:27:04   作者:__大白菜__   我要评论

这篇文章主要介绍了java迭代器模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

场景

  1. 提供一种可以遍历聚合对象的方式。又称为:游标cursor模式
  2. 聚合对象:存储数据
  3. 迭代器:遍历数据

JDK内置的迭代器(List/Set)

package com.qianyu.gof.iterator;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @author lijing
 * @date 2019-04-10-14:38
 * @discroption JDK内置迭代器测试类
 */
public class IteratorTest {
  public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("a");
    list.add("b");
    list.add("c");
    Iterator<String> iter = list.iterator();
    //hasNext()判断是否有下一个元素
    while (iter.hasNext()) {
      //next()函数返回当前元素,并将游标指向下一位
      System.out.println(iter.next());
    }
  }
}

手动实现迭代器

package com.qianyu.gof.iterator;

/**
 * @author lijing
 * @date 2019-04-10-14:37
 * @discroption 迭代器接口
 */
public interface MyIterator {
  /**
   * 判断是否有下一个元素
   *
   * @return
   */
  boolean hasNext();

  /**
   * 返回当前元素,并且将游标向下移动一位
   *
   * @return
   */
  Object next();
}
package com.qianyu.gof.iterator;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lijing
 * @date 2019-04-10-19:18
 * @discroption 自定义聚合类
 */
public class MyList {
  List<Object> list = new ArrayList<Object>();

  public boolean add(Object obj) {
    return list.add(obj);
  }

  public boolean remove(Object obj) {
    return list.remove(obj);
  }

  /**
   * 返回迭代器对象
   *
   * @return
   */
  public ConcreteIterator iterator() {
    return new ConcreteIterator();
  }

  /**
   * 自定义内部类,可以直接使用外部类的属性
   */
  private class ConcreteIterator implements MyIterator {
    //游标
    private int cursor = 0;

    @Override
    public boolean hasNext() {
      return this.cursor < list.size();
    }

    @Override
    public Object next() {
      return list.get(cursor++);
    }
  }
}
package com.qianyu.gof.iterator;

/**
 * @author lijing
 * @date 2019-04-10-19:14
 * @discroption 自定义迭代器测试类(迭代器模式)
 */
public class IteratorTest2 {
  public static void main(String[] args) {
    MyList myList = new MyList();
    myList.add("aa");
    myList.add("bb");
    myList.add("cc");
    MyIterator iter = myList.iterator();
    while (iter.hasNext()){
      System.out.println(iter.next());
    }
  }
}

UML类图:

以上所述是小编给大家介绍的java迭代器模式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • java 按行读取文件并输出到控制台的方法

    java 按行读取文件并输出到控制台的方法

    今天小编就为大家分享一篇java 按行读取文件并输出到控制台的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 浅谈在JAVA项目中LOG4J的使用

    浅谈在JAVA项目中LOG4J的使用

    下面小编就为大家带来一篇浅谈在JAVA项目中LOG4J的使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • spring5 webclient使用指南详解

    spring5 webclient使用指南详解

    本篇文章主要介绍了spring 5 webclient使用指南详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java的面向对象编程基本概念学习笔记整理

    Java的面向对象编程基本概念学习笔记整理

    这篇文章主要介绍了Java的面向对象编程基本概念学习笔记整理,包括类与方法以及多态等支持面向对象语言中的重要特点,需要的朋友可以参考下
    2016-01-01
  • 使用Post方式提交数据到Tomcat服务器的方法

    使用Post方式提交数据到Tomcat服务器的方法

    这篇将介绍使用Post方式提交数据到服务器,由于Post的方式和Get方式创建Web工程是一模一样的,只用几个地方的代码不同,这篇文章主要介绍了使用Post方式提交数据到Tomcat服务器的方法,感兴趣的朋友一起学习吧
    2016-04-04
  • 详解在springboot中使用Mybatis Generator的两种方式

    详解在springboot中使用Mybatis Generator的两种方式

    这篇文章主要介绍了详解在springboot中使用Mybatis Generator的两种方式,本文将介绍到在springboot的项目中如何去配置和使用MBG以及MBG生成代码的两种方式,非常具有实用价值,需要的朋友可以参考下
    2018-11-11
  • mybatis调用存储过程的实例代码

    mybatis调用存储过程的实例代码

    这篇文章主要介绍了mybatis调用存储过程的实例,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-10-10
  • spring boot(四)之thymeleaf使用详解

    spring boot(四)之thymeleaf使用详解

    Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。接下来通过本文给大家介绍spring boot(四)之thymeleaf使用详解,需要的朋友可以参考下
    2017-05-05
  • java之this关键字用法实例分析

    java之this关键字用法实例分析

    这篇文章主要介绍了java之this关键字用法实例分析,较为详细的讲述了Java中this关键字的用法及适用范围,并附带实例程序加以说明,需要的朋友可以参考下
    2014-09-09
  • java网上图书商城(7)订单模块2

    java网上图书商城(7)订单模块2

    这篇文章主要为大家详细介绍了java网上图书商城,订单模块第二篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12

最新评论