java.lang.Iterable

從jdk1.5 java.lang包增長了這個接口。java

實現這個接口容許對象成爲 "foreach" 語句的目標,即加強的for循環。.net

然而此接口中只有一個接口類方法。對象

  /**
     * Returns an iterator over a set of elements of type T.
     *
     * @return an Iterator.
     */
    Iterator<T> iterator();接口

實現這個接口不少,好比ArrayListLinkedHashSet, LinkedList等等element

ArrayList中有一個內部類實現了Iterator:get

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

  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
        int expectedModCount = modCount;for循環

        public boolean hasNext() {
            return cursor != size;
        }ast

.......class

因此使用for循環與使用迭代器iterator是有很明顯的區別的:

一、iterator能夠動態的移除元素,不用維護元素小標,可是for循環不行。

二、採用ArrayList對隨機訪問比較快,而for循環中的get()方法,採用的便是隨機訪問的方法,所以在ArrayList裏,for循環較快。

三、採用LinkedList則是順序訪問比較快,iterator中的next()方法,採用的便是順序訪問的方法,所以在LinkedList裏,使用iterator較快。

相關文章
相關標籤/搜索