设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器
来源:互联网 发布:上海淘宝运营培训班 编辑:程序博客网 时间:2024/06/05 05:35
上周六就开始写这篇博客,之后一直耽误了,到前天才开始写,今天醒的早,就把这部分整理一下。本文内容参考易学设计模式和马士兵的迭代器模式的视频。
了解迭代器模式一个作用就是让你在使用 迭代器遍历集合类的时候 觉得更自然。'
一 、迭代器模式简介
【定义】 跌倒器模式提供一种顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示的方法。
【原理】 主要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;@Overridepublic boolean hasNext() {if(currentIndex >= index) return false;else return true;}@Overridepublic 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;}@Overridepublic Iterator iterator() {return new LinkedListIterator();}private class LinkedListIterator implements Iterator{private Node currentNode = head;private int nextIndex = 0;//参考源码中的写法@Overridepublic Object next() {Object data = currentNode.getData();currentNode = currentNode.getNext();nextIndex ++;return data;}@Overridepublic 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 }
以上代码测试通过。
9 0
- 设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器
- 【设计模式】Iterator设计作业-设计LinkedList的iterator
- 设计模式(15) 迭代器模式(Iterator)C++实现
- 设计模式实现(十六)---迭代器模式(Iterator)
- 设计模式的迭代器模式 Iterator
- 设计模式 -- Iterator(迭代器)
- Iterator(迭代器)设计模式
- Iterator 迭代器设计模式
- Iterator 迭代器设计模式
- 设计模式--迭代器模式(Iterator)
- 设计模式之--迭代器模式(Iterator)
- java设计模式-迭代器模式(Iterator)
- 设计模式之(Iterator)迭代器模式
- java设计模式-迭代器模式(Iterator)
- 设计模式:迭代器模式(Iterator)
- 设计模式:迭代器模式(Iterator)
- 设计模式(16)-迭代器模式(Iterator)
- [设计模式]迭代器模式(Iterator)
- linux--数据流重导向
- Oracle中查询带有lob字段的表的大小
- web测试总结
- Dom4J解析xml文档
- LeetCode 115. Distinct Subsequences
- 设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器
- LeetCode 116. Populating Next Right Pointers in Each Node
- LeetCode 117. Populating Next Right Pointers in Each Node II
- Python 获取Facebook instance
- 无法安装Mongodb服务的解决办法
- ARM指令中标志位的定义
- buffer and cache in linux
- MIC人工智能芯片
- Ubuntu 相关的