JavaSE进阶

2、查看Iterator迭代器源码

概念:迭代器(iterator)有时又称为游标(cursor),提供一种方法访问一个容器(container)对象中各个元素,而又不需要暴露该对象的内部细节。

作用:是为容器遍历而生,用以方便的实现对容器内元素的遍历操作。类似于“公交车上的售票员”、“火车上的乘务员”、“空姐”,售票员关注公交车上的每个乘客。

走到每个座位之前,看看是否有乘客,如果有检查该乘客,如果该乘客未购票,可以请他下车,也只能请刚刚检查过的乘客下车。

每一类集合都有自己的迭代器,迭代器是为对应的集合服务的,因此迭代器都是作为对应集合的内部类定义的。

示例:只摘取关键代码ArrayList的内部迭代器Itr

private class Itr implements Iterator<E> {

        int cursor;       // index of next element to return

        int lastRet = -1; // index of last element returned; -1 if no such

 

        public boolean hasNext() {

            return cursor != size;

        }

        public E next() {

            int i = cursor;

            cursor = i + 1;

            return (E) elementData[lastRet = i];

        }

        public void remove() {

            if (lastRet < 0)

                throw new IllegalStateException();

            try {

                ArrayList.this.remove(lastRet);

                cursor = lastRet;

                lastRet = -1;

            } catch (IndexOutOfBoundsException ex) {

                throw new ConcurrentModificationException();

            }

        }

}

    public E remove(int index) {

        E oldValue = elementData(index);

 

        int numMoved = size - index - 1;

        if (numMoved > 0)

            System.arraycopy(elementData, index+1, elementData, index,

                             numMoved);

        elementData[--size] = null; // clear to let GC do its work

 

        return oldValue;

    }