设计模式学习笔记1: 迭代器模式(interator)

自定义接口

接口

public interface Collection {
    void add(Object ob);
    int size();
    Iterator iterator();
}
public interface Iterator {
    Object next();
    boolean hasNext();
}

测试

public class Test {

    public static void main(String[] args) {

        //Collection c = new ArrayListTest();
        Collection c = new LinkedList();

        for (int i = 0; i < 15; i++) {
            c.add(new Cat(i));
            System.out.println(c.size());
        }

        Iterator iterator = c.iterator();
        while (iterator.hasNext()) {
            Object ob = iterator.next();
            System.out.println(ob);
        }
    }
}

模拟ArrayList

import study1.Collection; //自定义 接口 Collection
public class ArrayListTest implements Collection{
    private int index;

    private Object[] objectArray = new Object[10];

    public void add(Object object) {
        if (index == objectArray.length) {
            Object[] objectsB = new Object[objectArray.length + 100];
            System.arraycopy(objectArray, 0, objectsB, 0, objectArray.length);
            objectArray = objectsB;
        }
        objectArray[index] = object;

        index++;
    }

    public int size() {
        return index;
    }

    public Iterator iterator() {
        return new ArrayListIterator();
    }

    //内部类
    private class ArrayListIterator implements Iterator{
        private int currentIndex = 0;

        public boolean hasNext() {

            if (currentIndex < index) {
                return true;
            }else {
                return false;
            }
        }

        public Object next() {

            Object ob = objectArray[currentIndex];
            currentIndex++;
            return ob;
        }

    }

}

模拟 LinkedList

import study1.Collection; //自定义 接口 Collection
public class LinkedList implements Collection{
    Node head = null; //
    Node tail = null; // 尾

    int size = 0;

    public void add(Object ob){
        Node n = new Node(ob, null);//新结点为尾结点
                                         //尾结点指向 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 int currentSize = 0;
        Node node = head;

        public Object next() {
            if (currentSize == 0) {
                currentSize++;
                return node;
            } else {
                node = node.getNext();
                currentSize++;
                return node;
            }

        }

        public boolean hasNext() {
            if (currentSize >= size) {
                return false;
            } else {
                return true;
            }
        }

//       Node node = new Node(null, head); //方法二,速度慢
//
//        @Override
//        public Object next() {
//            currentSize++;
//            node = node.getNext();
//            return node;
//        }

    }


}

增加泛型

public class GenericArrayList<E> {
    private int index;

    private Object[] objectArray = new Object[10];

    public void add(E e) {
        if (index == objectArray.length) {
            Object[] objectsB = new Object[objectArray.length + 100];
            System.arraycopy(objectArray, 0, objectsB, 0, objectArray.length);
            objectArray = objectsB;
        }
        objectArray[index] = e;

        index++;
    }

    public int size() {
        return index;
    }

    public static void main(String[] args) {
        GenericArrayList<String> genericArrayList = new GenericArrayList<>();
        genericArrayList.add("ppds");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值