2013-03-14 43 views
1

我對Java仍然很陌生,今天我嘗試瞭解使用迭代器。
所以,我有幾個問題:Iterable和Iterator接口的使用

  1. 爲什麼我需要實現Iterable的話,那只是給創建集合的新的迭代的方法,但我也可以同樣使用正常,或者如果我想獲得所有元素,則加強for-loop。 我已經讀過這個問題:What is the Iterable interface used for?以及更多,但他們只是說它可以讓你遍歷所有的元素,這導致我的問題。

  2. 如果我實現Iterable,我應該執行迭代器嗎?
    因爲這實際上提供了可能對覆蓋有用的方法。
    例如,如果我班有一個布爾值,我是否要我在一個循環或沒有對象,我可以寫

    public boolean hasNext() { 
    if(loop) 
        return true; 
        //other things 
    } 
    
  3. 如果我在第2樣說,將一個enchanced for循環使用這些覆蓋方法?
    例如上面提到的循環屬性:如果for循環是真的,for循環會無限運行嗎?

我希望有人能幫助我更好地理解這個整體概念。

+1

如果*不*實現Iterable,您將如何在您的課堂上使用for-each? – 2013-03-14 18:39:24

+0

重複http://stackoverflow.com/questions/89891/what-are-the-benefits-of-the-iterator-interface-in-java – 2013-03-14 18:41:59

+0

對於未來的問題,請在每次只問一個問題。 SO問題之間的鏈接很好,但是一個SO問題應該只包含一個問題。想象一下,如果某人只回答第一個問題和第二個問題會發生什麼情況,但是如果您接受答案,第三個問題將會打開 - 未來的訪問者可能不會看到第三個問題仍然是開放的,如果您不接受它,它看起來像前兩個子問題的答案是不正確的或不滿意的。 – 2013-03-14 18:45:45

回答

4

如果你正在定義一個集合,你的實現一個Iterable。例如,如果你想創建一個自定義列表,您通常會讓它繼承AbstractList,這本身延伸AbstractCollection,它實現Collection,它實現Iterable。所以你的名單將是「事實上」Iterable

但如果你繼承AbstractList,你不會自己實現迭代器,因爲這種方法將已經在那裏執行。也就是說,你可能想爲你的需求提供一個專門的迭代器。

當你實現Iterable(如果你真的想),你返回Iterator。集合本身不應該實現Iterator,只有返回的迭代器。看看AbstractList的源代碼,看看它是如何完成的。

當您使用增強的for循環,您使用的是Iterable。增強型for循環只是語法糖,用於迭代器上的循環,由iterator()返回。這意味着編譯器會將您的代碼轉換爲使用迭代器。這就是爲什麼您必須實施Iterable才能將該集合用於增強型for-loop。

相關問題