这篇文章比较简单,作一个笔记。

模拟Iterator.

Iterator接口:

package cn.asto.Interator;

public interface Iterator {

    public boolean hasNext();
public Object next();
}

ArrayList类:

package cn.asto.Interator;

public class ArrayList implements List{
private int index = 0;
private Object[] object = new Object[10];
public void add(Object o ){
if(index==object.length){
Object[] newObject = new Object[object.length+10];
System.arraycopy(object, 0, newObject, 0, object.length);
newObject[index] = o;
object = newObject;
}
object[index]=o;
index++;
}
public int size(){
return index;
}
@Override
public Iterator iterator() { return new arrayIterator();
} private class arrayIterator implements Iterator{
private int currentIndex;
@Override
public boolean hasNext() {
if(currentIndex==index)return false;
return true;
} @Override
public Object next() {
Object o = object[currentIndex];
currentIndex++;
return o;
} }
}

Test:

package cn.asto.Interator;

public class Test {

    public static void main(String args[]){
List a = new ArrayList();
int i = 11;
while(i-->0){
a.add(new Object());
}
Iterator ite = a.iterator();
while(ite.hasNext()){
Object o = ite.next();
System.out.println(o);
} } }

每一种集合提供一个实现Iterator的内部类,每次调用iterator返回一个内部的实现,用户不必关心具体的实现。用户只要知道hasNext()判断集合中是否还存在元素,next取得下一个元素。

再次重提 用户不用去关心具体的实现。

LinkedList:

package cn.asto.Interator;

public class LinkedList implements List{

    private Node head = null; //头节点
private Node tail = null;//尾节点
private int size = 0;
@Override
public void add(Object o){
Node n = new Node(o,null);
if(head==null){
head = n;
tail = n;
}else{
tail.setNext(n);
tail = n;
}
size ++;
} public int size(){
return size;
} @Override
public Iterator iterator() {
// TODO Auto-generated method stub
return new linkedIterator();
}
private class linkedIterator implements Iterator{
private Node currentNode;
@Override
public boolean hasNext() {
if(currentNode == tail) return false;
return true;
} @Override
public Object next() {
if(currentNode==null){
currentNode = head;
}else {
currentNode = currentNode.getNext();
}
return currentNode.getData(); } } }

Test:

package cn.asto.Interator;

public class Test {

    public static void main(String args[]){
List a = new LinkedList();
int i = 11;
while(i-->0){
a.add(new Object());
}
Iterator ite = a.iterator();
while(ite.hasNext()){
Object o = ite.next();
System.out.println(o);
} } }

设计模式之Iterator模式(2)的更多相关文章

  1. 设计模式之Iterator模式

    STL里的iterator就是应用了iterator模式. 一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator按顺 ...

  2. Java设计模式之Iterator模式

    分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例 ...

  3. 设计模式—迭代器Iterator模式

    什么是迭代器模式? 让用户通过特定的接口访问容器的数据,不需要了解容器内部的数据结构. 首先我们先模仿集合中ArrayList和LinkedList的实现.一个是基于数组的实现.一个是基于链表的实现, ...

  4. 设计模式——迭代器(Iterator)模式

    概述 迭代器模式简单的说(按我目前的理解)就是一个类提供一个对外迭代的接口,方面调用者迭代.这个迭代接口至少包括两个方法:hasNext()--用于判断是否还有下一个,next()--用于取出下一个对 ...

  5. 设计模式:Iterator模式

    目的:将数据的存储和数据的查询分开,降低数据的耦合性 继承关系图: 例子: //定义迭代器接口 template<typename T> class Iterator { public: ...

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

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

  7. Java设计模式(12)迭代模式(Iterator模式)

    上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟, ...

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

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

  9. 【设计模式大法】Iterator模式

    Iterator模式 --一个一个遍历 在Java中的for语句中 i++的作用是让 i 的值在每次循环后自增1,这样就可以访问数组中的下一个元素.下下一个元素.再下下一个元素,也就实现了从头至尾逐一 ...

随机推荐

  1. android自适应屏幕方向和大小

    一:不同的layout Android手机 屏幕 大小不一,有480x320, 640x360, 800x480.怎样才能让App自动 适应不同的屏幕 呢?      其实很简单,只需要在res目录下 ...

  2. URLEncode与URLDecode总结与实现

    URLEncode: 用于编码URL字符串,数字和字母保持不变,空格变为'+',其他(如:中文字符)先转换为十六进制表示,然后在每个字节前面加一个标识符%,例如:“啊”字 Ascii的十六进制是0xB ...

  3. CDN技术分享

    CDN技术分享目录 网络应用服务发展 CDN技术 1.CDN是什么?为什么我们需要它?(简介) 2.CDN能做什么?(作用) 3.CDN是如何工作?(原理) 4.CDN有那些具体应用?(应用) 我们项 ...

  4. Erwin 生成 mysql 带注释(comment )的脚本

    Erwin设计数据库非常方便,有逻辑视图和物理视图,可以很方便的生成数据库文档和SQL 脚本.在使用过程中唯一不爽的地方是脚本不能生成comment.   在百度无数次无法解决下,又FQ谷歌,在一个日 ...

  5. C#调用JAVA接口WSSE方式用WebClient方式

    C#读取JAVA的WSSE接口的调用代码: 用webclient 方式: /// <summary> /// 调用java cxf ws_security加密的服务wcf客户端对应的加密类 ...

  6. HTML5+javascript实现图片加载进度动画效果

    在网上找资料的时候,看到网上有图片加载进度的效果,手痒就自己也写了一个. 图片加载完后,隐藏loading效果. 想看加载效果,请ctrel+F5强制刷新或者清理缓存. 效果预览:   0%   // ...

  7. CISA 信息系统审计知识点 [第二章. IT治理和管理 ]

    第二章.  IT治理和管理 1.  IT治理.管理.安全和控制框架及标准.指南和实践 IT治理是董事会和执行管理层的职责. IT治理的关键因素:保持与业务的战略一致,引导业务价值的实现. IT治理关注 ...

  8. 自定义StyleCop规则

    参考:StyleCopSDK.chm与 Byeah的 编写StyleCop自定义规则教程(一)---编写中文备注的简单校验规则 1.建立“类库”类型的C#项目 2.加入 Microsoft.Style ...

  9. C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

    大家可以到http://www.icsharpcode.net/opensource/sharpziplib/ 下载SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, ...

  10. EPLAN P8导线颜色的设置

    P8里的导线应称为"连接",连接的颜色代表了其电位的传递路径,如可以给三相电源设置成黑色,PE设为绿色,N设为蓝色等等.  P8中电位在连接和元器件中传递的方法是由元器件的连接点属 ...