先贴代码,有空来写内容。

1.定义集合


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

 //coollection是我自己定义的一个集合,因为要写迭代器,得有个迭代的对象啊。
class coollection<Object>{
//coollection的数据存储在一个ArrayList里
private List<Object> data = new ArrayList<Object>();
//index用于记录当前将迭代元素的下标
private int index = 0;
//给集合添加元素
public void add(Object o){
data.add(o);
}
//获取index
public int getCurrent(){
return index;
}
//获取集合规模
public int size(){
return data.size();
}
//获取一个元素并将索引指向下一个元素
public Object get(){
return data.get(index++);
}
//删除已经被迭代的最后一个元素
public void remove(){
if(index != 0)
data.remove(index-1);
}
//获取coollection的迭代器
public iterator getiterator(){
index = 0;
return new coollectionItrator(this);
}
}

2.写迭代器

 //迭代器接口,所有迭代器都要实现这个接口的所有功能
interface iterator{
public boolean hasNext();
public Object next();
public void remove();
}
//coollection集合的专属迭代器,实现了iterator
class coollectionItrator implements iterator{
//定义该迭代器要操作的集合 dataSrc
coollection<Object> dataSrc;
//初始化集合
public coollectionItrator(coollection c){
dataSrc = c;
}
//重写hasNext()
@Override
public boolean hasNext(){
return dataSrc.size() > dataSrc.getCurrent();
}
//重写next()
@Override
public Object next(){
return dataSrc.get();
}
//重写remove()
@Override
public void remove(){
dataSrc.remove();
}
}

3.测试迭代器

 // 测试迭代器
public class iteratorDemo{
public static void main(String[] args){
//new 一个集合,将三个实例放进集合里
coollection<Student> stu = new coollection<Student>();
stu.add(new Student("singleDog","man","18"));
stu.add(new Student("singleDoge","feman","19"));
stu.add(new Student("0.0","feman","20")); //获取集合stu的迭代器
iterator it = stu.getiterator();
//遍历集合并输出元素
while(it.hasNext()){
System.out.println(it.next());
}
// 测试迭代器的remove功能
it.remove();
System.out.println("删除后:");
it = stu.getiterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}

设计模式02迭代器(java)的更多相关文章

  1. 23种设计模式全解析 (java版本)

    转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...

  2. Python进阶:设计模式之迭代器模式

    在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...

  3. 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)

    设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...

  4. 实践GoF的设计模式:迭代器模式

    摘要:迭代器模式主要用在访问对象集合的场景,能够向客户端隐藏集合的实现细节. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:迭代器模式>,作者:元闰子. 简介 有时会遇到这 ...

  5. 从设计模式说起JAVA I/O流

    从设计模式说起JAVA I/O流 之前写过一篇I/O流的入门介绍,直到最近看了设计模式,顺带理下I/O流的设计思路. JAVA类库中的I/O类分成输入和输出两部分,通过继承,任何自InputStrea ...

  6. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)

    原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...

  7. python设计模式之迭代器与生成器详解(五)

    前言 迭代器是设计模式中的一种行为模式,它提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.python提倡使用生成器,生成器也是迭代器的一种. 系列文章 python设计模 ...

  8. iOS设计模式(02):单例模式

    iOS设计模式(02):单例模式 singleton-design-pattern 什么是单例模式? 单例模式是一个类在系统中只有一个实例对象.通过全局的一个入口点对这个实例对象进行访问.在iOS开发 ...

  9. js设计模式——4.迭代器模式

    js设计模式——4.迭代器模式 代码演示 /*js设计模式——迭代器模式*/ class Iterator { constructor(container) { this.list = contain ...

随机推荐

  1. Android 指纹认证

    安卓指纹认证使用智能手机触摸传感器对用户进行身份验证.Android Marshmallow(棉花糖)提供了一套API,使用户很容易使用触摸传感器.在Android Marshmallow之前访问触摸 ...

  2. 使用tornado,我们可以做什么?

    以下介绍都是建立在python2.x的基础上面,tornado使用任意版本皆可. 如果我们需要对外提供一个http server(web api)/websocket server时,我们都可以使用t ...

  3. 如何利用 Visual Studio 自带工具提高开发效率

    Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...

  4. CSS 实现打字效果

    JS实现 最近做项目的时候需要实现一个字符逐个出现的打字效果,在网上一搜有个不错的jQuery插件Typed.js,效果很赞 <div class="element"> ...

  5. [MongoDB] 32Bit构建上文件大小限制问题

    一. 问题概述 今天看看爬虫抓取的数据,发现数据无法插入,首先想到的就是32Bit构建的文件大小限制问题,检查一下还真的是.本文把整个检查问题,解决问题的过程记录下来. 问题:     "s ...

  6. Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化

    9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...

  7. Python标准模块--asyncio

    1 模块简介 asyncio模块作为一个临时的库,在Python 3.4版本中加入.这意味着,asyncio模块可能做不到向后兼容甚至在后续的Python版本中被删除.根据Python官方文档,asy ...

  8. ES6之块级作用域

    一.前言 在ECMAScript6(以下简称ES6)之前,ECMAScript的作用域只有两种: 1.  全局作用域: 2.  函数作用域. 正是因为有这两种作用域,所以在JavaScript中出现一 ...

  9. ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器

    一. 前言 好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生. 言归正传,一直以来,数据挖掘系统的数据类 ...

  10. iOS开发之"省市"二级联动的数据组织(PHP版)以及PickerView的实现与封装

    之所以要发表这篇博客,还源于最近的开发工作所实现的一个小的Demo, 当然这个Demo不会涉及工作中App的一些内容,下方要实现的Demo是通用的.因为项目需求的迭代,要求在银行卡绑定中添加支行所在的 ...