设计模式之Iterator模式(2)
2015-08-23 19:24
190 查看
这篇文章比较简单,作一个笔记。
模拟Iterator.
Iterator接口:
ArrayList类:
Test:
每一种集合提供一个实现Iterator的内部类,每次调用iterator返回一个内部的实现,用户不必关心具体的实现。用户只要知道hasNext()判断集合中是否还存在元素,next取得下一个元素。
再次重提 用户不用去关心具体的实现。
LinkedList:
Test:
模拟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; } Node n = currentNode; currentNode = currentNode.getNext(); return n.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); } } }
相关文章推荐
- SQLPlus 启动与关闭Oracle数据库
- Github项目中使用率最高的Java/Ruby/JS库(转)
- Poj2488 A Knight's Journey
- 在csdn上的第一篇博客
- linux:vim基础
- 通俗理解T检验和F检验
- php大力力 [009节]php在百度文库的几个基础教程
- 创建自定义控件
- Codeforces Round #267 (Div. 2) C. George and Job DP
- 访问nginx提示gateway timeout 504 ,发现总是当调用时间超过30s时提示504错误
- 149. Max Points on a Line
- 【LeetCode】257. Binary Tree Paths
- R语言之装袋、adaboost、随机森林算法
- FZU-2151 OOXX Game
- jq回调对象和延迟对象
- 图片选择器之Multi-Image-Selector(国产的)
- python 的日志logging模块学习
- 深入理解iOS API系列(三)UiView事件传递相关函数:pointInside:withEvent:和hittest:withevent:
- http:关于长连接和分块传输
- JavaScript语言基础知识11