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

时间:2014-01-06 19:45:45

标签: java inheritance iterator

我有一份家庭作业,有一件事是我无法掌握的。

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

此类中的所有其他方法对数组执行不同的操作(例如添加或删除特定整数)。其他一些方法创建了一个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");
    }
}

“Size”varle表示实际的数组或堆栈大小,“values”是存储所有整数的数组。

提前谢谢。

2 个答案:

答案 0 :(得分: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());
}

这似乎不是一个很大的胜利,但它可能是基础集合类型比数组更复杂。

答案 1 :(得分:0)

iterator方法的目的可能是提供与for语句一起使用所必需的东西。如果你说像

这样的话
for (SomeType val : SomeObject)

然后如果SomeObject不是数组,那么它必须是实现Iterable<SomeType>的东西[技术上,它可以为{的某些子类实现IterableIterable<T> {1}}]。如果某个类实现SomeType,则它必须具有Iterable<SomeType>方法:

iterator

执行上述public Iterator<SomeType> iterator() { ... } 语句时,首先创建for

Iterator<SomeType>

internalIterator = SomeObject.iterator(); 语句然后调用for上的nexthasNext方法依次检查每个对象,并知道何时停止循环。因此,internalIteratorIterator<SomeType>方法,每次调用时都会返回“下一个”值。实际上,多次调用next会返回值的列表,一次一个。在这种情况下,next保留在Iterator<Integer>索引上,该索引告诉它下一步返回什么值,并且其count方法返回下一个值。