关于java:Iterator-迭代器模式

简介:

提供一种办法程序的拜访一个聚合对象中各个元素,而又不裸露该对象的外部示意

模式构造:


1、Collection:形象汇合接口
2、Iterator:形象迭代器接口
3、Arraylist、HashSet:具体汇合类,通过iterator()返回具体的迭代器对象
4、ArrayIterator、HashIterator:具体的迭代器

模式实例:

1、Collection:形象汇合接口

public interface Collection<E> {
    public void add(E o);
 int size();
 Iterator_ iterator();
}

2、Arraylist_:实现Collection接口的汇合类

/**
 * 相比与数组,这个容器不必思考边界问题,能够动静扩大
 */
public class Arraylist_<E> implements Collection<E> {
    E[] objects = (E[])new Object[10];
 //objects中下一个空的地位在哪儿,或者说目前容器中有多少个元素
 private int index = 0;
 public void add(E o) {
        if(index == objects.length){
            E[] newObjects = (E[])new Object[objects.length * 2];
 System.arraycopy(objects,0,newObjects,0,objects.length);
 objects = newObjects;
 }
        objects[index] = o;
 index++;
 }
    public int size(){return index;}
    @Override
 public Iterator_ iterator() {
        return new ArraylistIterator();
 }
    private class ArraylistIterator<E> implements Iterator_<E> {
        private int currentIndex = 0;
 @Override
 public boolean hasNext() {
            if(currentIndex >= index) {
                return false;
 }
            return true;
 }
        @Override
 public E next() {
            E o = (E) objects[currentIndex];
 currentIndex++;
 return o;
 }
    }
}

3、Iterator_:迭代器接口

public interface Iterator_<E> {
    boolean hasNext();
 E next();
}

4、Main: 测试

public class Main {
    public static void main(String[] args) {
        Collection<String> list = new Arraylist_<String>();
 for(int i = 0; i<15; i++) {
            list.add(new String("s"+i));
 }
        System.out.println(list.size());
 Iterator_<String> it = list.iterator();
 while (it.hasNext()){
            String o = it.next();
 System.out.println(o);
 }
    }
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理