我有一份家庭作业,有一件事是我无法掌握的。
我有一个抽象类,其中包含方法。我必须创建一个继承和扩展这些方法的子类。在那个抽象类中有一种我不理解的方法。有人知道这段代码是做什么的吗?
此类中的所有其他方法对数组执行不同的操作(例如添加或删除特定整数)。其他一些方法创建了一个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”是存储所有整数的数组。
提前谢谢。
答案 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>
的东西[技术上,它可以为{的某些子类实现Iterable
或Iterable<T>
{1}}]。如果某个类实现SomeType
,则它必须具有Iterable<SomeType>
方法:
iterator
执行上述public Iterator<SomeType> iterator() { ... }
语句时,首先创建for
:
Iterator<SomeType>
internalIterator = SomeObject.iterator();
语句然后调用for
上的next
和hasNext
方法依次检查每个对象,并知道何时停止循环。因此,internalIterator
有Iterator<SomeType>
方法,每次调用时都会返回“下一个”值。实际上,多次调用next
会返回值的列表,一次一个。在这种情况下,next
保留在Iterator<Integer>
索引上,该索引告诉它下一步返回什么值,并且其count
方法返回下一个值。