设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器
上周六就開始写这篇博客,之后一直耽误了。到前天才開始写。今天醒的早,就把这部分整理一下。
本文内容參考易学设计模式和马士兵的迭代器模式的视频。
了解迭代器模式一个作用就是让你在使用 迭代器遍历集合类的时候 认为更自然。'
一 、迭代器模式简单介绍
【定义】 跌倒器模式提供一种顺序訪问一个聚合对象中各个元素,而又不暴露该对象的内部表示的方法。
【原理】 主要4部分组成:迭代器角色、详细迭代器角色、容器角色和详细容器角色。
【使用时机】当訪问一个聚合对象的内容而无需暴露它的内部表示,或者须要支持对集合对象的多种遍历。或者为
遍历不同的聚合结构提供一个统一的接口时,就能够考虑是用迭代器模式。
二 、实现ArrayList和linkedList的迭代器
这里仅仅是简单实现,详细的能够看看源代码。记得csdn中有一个 兰亭风雨 的博客写有集合类源代码解析的文章。
上代码:
Iterator.java
package com.chan;
public interface Iterator {
Object next();
boolean hasNext();
}
Collection.java
package com.chan;
public interface Collection {
void add(Object obj);
int size();
Iterator iterator();
}
Node,java
package com.chan;
public class Node {
private Object data;
private Node next;
public Node(Object data, Node next) {
super();
this.data = data;
this.next = next;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
ArrayList.java
package com.chan;
public class ArrayList implements Collection { Object[] objects = new Object[10];
int index = 0;
public void add(Object o) {
if(index == objects.length) {
Object[] newObjects = new Object[objects.length * 2];
System.arraycopy(objects, 0, newObjects, 0, objects.length);
objects = newObjects;
}
objects[index] = o;
index ++;
} public int size() {
return index;
} public Iterator iterator() { return new ArrayListIterator();
} private class ArrayListIterator implements Iterator {
private int currentIndex = 0; @Override
public boolean hasNext() {
if(currentIndex >= index) return false;
else return true;
} @Override
public Object next() {
Object o = objects[currentIndex];
currentIndex ++;
return o;
} }
}
LinkedList.java
package com.chan;
public class LinkedList implements Collection {
Node head = null;
Node tail = null;
int size = 0;
public void add(Object o) {
Node n = new Node(o, null);
if(head == null) {
head = n;
tail = n;
}
tail.setNext(n);
tail = n;
size ++;
}
public int size() {
return size;
}
@Override
public Iterator iterator() {
return new LinkedListIterator();
}
private class LinkedListIterator implements Iterator{
private Node currentNode = head;
private int nextIndex = 0;//參考源代码中的写法
@Override
public Object next() {
Object data = currentNode.getData();
currentNode = currentNode.getNext();
nextIndex ++;
return data;
}
@Override
public boolean hasNext() {
return nextIndex != size;
}
}
}
Test>java
package com.chan;
public class Test { public static void main(String[] args) { //Collection c = new ArrayList();
Collection c = new LinkedList(); for(int i=0; i<15; i++){
c.add("test-"+i);
} System.out.println(c.size()); Iterator it = c.iterator();
while(it.hasNext()) {
Object o = it.next();
System.out.print(o + " ");
}
}
//15
//test-0 test-1 test-2 test-3 test-4 test-5 test-6 test-7 test-8 test-9 test-10 test-11 test-12 test-13 test-14
}
以上代码測试通过。
设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器的更多相关文章
- 迭代器模式 Iterator 行为型 设计模式(二十)
迭代器模式(Iterator) 走遍天下,世界那么大,我想去看看 在计算机中,Iterator意为迭代器,迭代有重复的含义,在程序中,更有“遍历”的含义 如果给定一个数组,我们可以通过for循 ...
- 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)
设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...
- 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)
上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型) 1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的 ...
- 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...
- 设计模式 -- 迭代器模式(Iterator)
--------------------------------------------------------------------- 1.场景问题 考虑这样一个问题: 9个学生对象分别通过数组存 ...
- Java 设计模式系列(十五)迭代器模式(Iterator)
Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...
- 设计模式 - 迭代器模式(iterator pattern) 具体解释
迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...
- 设计模式系列之迭代器模式(Iterator Pattern)——遍历聚合对象中的元素
模式概述 模式定义 模式结构图 模式伪代码 模式改进 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修 ...
随机推荐
- node调试工具--node-inspector安装
node-inspector安装: npm install --registry=http://r.cnpmjs.org -g cnpm cnpm install -g node-inspector ...
- n! 进制
n! 进制 Time limit per test: 1.0 seconds Time limit all tests: 1.0 seconds Memory limit: 256 megabytes ...
- jQuery实现checkbox即点即改,批量计数,以及中间遇到的坑
最近要用jQuery实现一个批量删除操作,效果如下图 最终页面page.html,此页面使用了bootstrap和jQuery,如果没有需要下载一下 <!DOCTYPE html> < ...
- java工程师学习线路图
- Navi.Soft31.产品.登录器(永久免费)
1系统简介 1.1功能简述 电商平台和传统店铺相比,确实方便不少,直接在网上下单,快递直接送货到家.这其中,做电商平台的童鞋表示压力很大,因为可能同时开很多店铺,每个店铺都要登录.查看订单量.发货拣货 ...
- C语言控制流语句
title: 2017-10-18控制流 tags: binsearch else-if, shellsort, insertsort grammar_cjkRuby: true --- 前段时间忙着 ...
- 深入理解立即执行函数(function(){})();
( function(){-} )()和( function (){-} () )是两种javascript立即执行函数的常见写法,要理解立即执行函数,需要先理解一些函数的基本概念. 1,函数声明,函 ...
- sqli-libs
这是抄袭你们 铃兰师姐总结的,尽管她很不情愿. (现在只是第八关,相信她会努力的,一定会做完,我也会随时在这个上面更新的,这个是在本地搭建的,想要这个的可以找你们铃兰师姐要啊!!!) less-1: ...
- 阿里云VPS搭建Hexo博客
最近买了一个阿里云服务器,准备写自己的网站,和将自己的作品放在上面:开始的时候,感觉就一个服务器应该很简单,但是从申请域名到备案,再到服务器搭建,没想到一波三折:闲话不多说,只是记录我在搭建时,最简单 ...
- 《java.util.concurrent 包源码阅读》13 线程池系列之ThreadPoolExecutor 第三部分
这一部分来说说线程池如何进行状态控制,即线程池的开启和关闭. 先来说说线程池的开启,这部分来看ThreadPoolExecutor构造方法: public ThreadPoolExecutor(int ...