2014-01-06 106 views
0

我有一個家庭作業任務,並且有一件事情我無法控制。作業:使用私有迭代器類的迭代器方法

我有一個抽象類,它包含方法。我必須創建一個繼承和擴展這些方法的子類。在抽象類中有一個我不明白的方法。有人知道這段代碼做什麼嗎?

該類中的所有其他方法對數組做不同的事情(如添加或刪除特定的整數)。其他一些方法創建一個LiFo棧(push,pop,peek,希望你明白我的意思)。但是我有其他的方法沒有任何問題,它只是這一次我不明白:

/*This is a method which I can use in my subclass and main method: */ 
public Iterator<Integer> iterator() { 
    return new IntIterator(); 
} 


/*This is a private inner class used by iterator() */ 
class IntIterator implements Iterator<Integer> { 
    private int count = 0; 
    public Integer next() {return values[count++];} 

    public boolean hasNext() {return count<size;} 

    public void remove() { 
     throw new RuntimeException("remove() is not implemented"); 
    } 
} 

「大小」 variale代表實際的數組或堆棧大小,「價值觀」是存儲所有整數數組。

預先感謝您。

+1

你不明白'iterator()'方法嗎?那你知道嗎? –

+1

您對您發佈的代碼有什麼不瞭解?私人內部類似乎相對簡單。那怎麼會讓你困惑? –

+0

很高興看到一個有禮貌,寫得很好的「家庭作業」問題。 – Ivan

回答

0

該代碼正在創建一個簡單的迭代器來迭代名爲values的數組。迭代器只是讓你更容易使用集合。取而代之的是:

for (int i = 0; i < values.size; i++) 
{ 
    System.out.println(values[i]); 
} 

你這樣做:

Iterator i = iterator(); 
while (i.hasNext()) { 
    System.out.printf(i.next()); 
} 

這似乎並不像一個巨大的勝利,但在這裏它可以當底層集合類型是不是一個數組更爲複雜。

0

iterator方法的目的可能提供使用for語句所需的東西。如果你這樣說

for (SomeType val : SomeObject) 

那麼如果SomeObject不是一個數組,它必須有一些實現Iterable<SomeType> [技術上,它可以爲SomeType某些子類中實現公正IterableIterable<T>。如果一個類實現Iterable<SomeType>,它必須有一個iterator方法:當執行上述for聲明

public Iterator<SomeType> iterator() { ... } 

,它開始通過創建一個Iterator<SomeType>

internalIterator = SomeObject.iterator(); 

for語句然後調用next和在internalIterator上的hasNext方法依次檢查每個對象,並知道何時停止循環。因此,Iterator<SomeType>有一個next方法,每次調用它時都會返回「下一個」值。實際上,多次調用next會一次返回一個值爲的列表。在這種情況下,Iterator<Integer>保存到count索引,該索引告訴它下一個要返回的值,並且其next()方法返回下一個值。