您的位置:首页 > 其它

设计模式之Iterator模式(2)

2015-08-23 19:24 190 查看
这篇文章比较简单,作一个笔记。

模拟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);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: