行为模式之中迭代器模式

2019-09-19  本文已影响0人  后来丶_a24d

总纲

迭代器模式



    public interface Iterator<E> {

        boolean hasNext();

        E next();

        void remove();
    }

    public interface Iterable<T> {

        Iterator<T> iterator();
    }

    public class LinkedList<E> implements Iterable<E>{

        private Entry<E> header = new Entry<E>(null, null, null);
        private int size;

        public LinkedList() {
            header.next = header.previous = header;
        }

        public void add(E e){
            Entry<E> newEntry = new Entry<E>(e, header, header.next);
            newEntry.previous.next = newEntry;
            newEntry.next.previous = newEntry;
            size++;
        }

        public int size(){
            return size;
        }

        public Object[] toArray(){
            Object[] result = new Object[size];
            int i = size - 1;
            for (Entry<E> e = header.next; e != header; e = e.next)
                result[i--] = e.value;
            return result;
        }

        private static class Entry<E>{
            E value;
            Entry<E> previous;
            Entry<E> next;
            public Entry(E value, Entry<E> previous, Entry<E> next) {
                super();
                this.value = value;
                this.previous = previous;
                this.next = next;
            }
        }

        public Iterator<E> iterator() {
            return new Itr();
        }

        private class Itr implements Iterator<E> {

            Entry<E> current = header;

            public boolean hasNext() {
                return current.previous != header;
            }

            public E next() {
                E e = current.previous.value;
                current = current.previous;
                return e;
            }

            public void remove() {

            }

        }

    }

    public static void main(String[] args) {
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        for (int i = 1; i <= 11; i++) {
            arrayList.add(i);
        }
        System.out.println("arrayList size:" + arrayList.size());
        Iterator<Integer> arrayListIterator = arrayList.iterator();
        while (arrayListIterator.hasNext()) {
            System.out.println(arrayListIterator.next());
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读