我想你想要这样的东西:
Iterface: MyIterator 将具有您所描述的 hasNext 和 next 方法。
类:MyHashSet
类:MyHashSetIterator 实现 MyIterator
你的 MyHashTable 类应该有它自己的数据结构(DS)——比如一个对象数组
正如您所描述的,MyHashSetIterator 应该具有 next() 和 hasNext() 的方法。它还需要有您的内部 DS 的副本和指向此 DS 中当前位置的指针。
MyHashTable 类中的 iterator() 方法返回此 MyHashSetIterator 类的副本。像这样的东西:
Class MyHashSet {
protected MyHashSetIterator _interator;
protected Object[] _internalData;
public MyIterator iterator() {
MyIterator result = new MyHashSetIterator(_internalData);
return result;
}
}
Class MyHashSetIterator implements MyIterator {
protected Object[] _iteratorData;
public MyHashSetIterator(Object[] theData) {
//code to populate _iteratorData with theData
//code to initialize point to first element of _iteratorData
}
public boolean hasNext() {
//code to see if pointer has/has not reached end of internal datastructure
}
public Object next() {
//code to return Object at element in Object array pointed at by pointer
}
}
}
请记住,将迭代器与 MyHashSet 同步在这里非常重要。也就是说,当你抓住迭代器,然后添加到 MyHashSet 时,你将如何处理这种情况?您将需要确定 MyIterator 是否具有 MyHashSet DS 的副本或具有指向它的指针。这可能会改变您内部变量的可见性..
祝你好运!