作业:使用私有迭代器类的迭代器方法

问题描述:

我有一个家庭作业任务,并且有一件事情我无法控制。作业:使用私有迭代器类的迭代器方法

我有一个抽象类,它包含方法。我必须创建一个继承和扩展这些方法的子类。在抽象类中有一个我不明白的方法。有人知道这段代码做什么吗?

该类中的所有其他方法对数组做不同的事情(如添加或删除特定的整数)。其他一些方法创建一个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

该代码正在创建一个简单的迭代器来迭代名为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()); 
} 

这似乎并不像一个巨大的胜利,但在这里它可以当底层集合类型是不是一个数组更为复杂。

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()方法返回下一个值。