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

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. BPM配置故事之案例2-文本默认值

    Boss感觉方便了很多,然而采购部采购员阿海却还是有点意见,他跑来找小明. 阿海:现在申请都是我在提交,申请人和申请部门能不能不要每次都要填写啊,好麻烦的. 小明:没问题,这个简单. 小明在表单中把申 ...

  2. 手动导入swift三方danielgindi/Charts到OC工程中教程

    1.到github网址上下载zip压缩包https://github.com/danielgindi/Charts 2.然后将解压后的文件夹整个拖到自己的工程文件夹下(很多教程只让拖xcodeproj ...

  3. 浅谈命令查询职责分离(CQRS)模式

    在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体.在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能 ...

  4. mysql sleep进程过多,应用级配置

    <property name="hibernateProperties"> <props> <prop key="hibernate.dia ...

  5. 数据预处理中归一化(Normalization)与损失函数中正则化(Regularization)解惑

    背景:数据挖掘/机器学习中的术语较多,而且我的知识有限.之前一直疑惑正则这个概念.所以写了篇博文梳理下 摘要: 1.正则化(Regularization) 1.1 正则化的目的 1.2 正则化的L1范 ...

  6. iOS 地图定位及大头针的基本使用

    地图 Part1 - 定位及大头针的基本使用 一.MapKit 作用 : 用于地图展示 如大头针,路线,覆盖层展示等(着重界面展示) 使用步骤 导入头文件 #import <MapKit/Map ...

  7. 读取xml数据装配到字典中之应用场景

    前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去 ...

  8. webSocket and LKDBHelper的使用说明

    socketket与lkdbhelper来处理数据 客户需求: 当我们有需要从自己的后台推送消息给我们的用户时,用户需要实时的接收到来自我们的推送消息.前提是没有使用第三方的推送框架,那么这个使用we ...

  9. WCF学习之旅—TcpTrace工具(二十五)

    前面的几篇文章,我们学习了怎么开发WCF应用程序与服务,也学习了如何进行WCF的配置.对于Web Service与WCF服务应用,服务端与客户端的通信是通过收发SOAP Message进行,我们如何有 ...

  10. 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式

    我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...