Java 迭代器无限循环-hasNext()和Next()

Java 迭代器无限循环-hasNext()和Next(),java,Java,我正在尝试使用一个实现迭代器的迭代器。迭代器应该遍历一个哈希表。当我试图打印出哈希表中的元素时,我在某个地方得到一个无限循环,同一个元素一直被打印,直到我终止程序。这是我的hasNext和next方法的代码(光标跟踪哈希表中的下一个活动单元格,因为该表不会按顺序填充,而活动表示该单元格正在被占用): public boolean hasNext() { 布尔项=假; //下一步: while(entry==false&&cursor=表格长度) { 抛出新的NoSuchElementExcept

我正在尝试使用一个实现迭代器的迭代器。迭代器应该遍历一个哈希表。当我试图打印出哈希表中的元素时,我在某个地方得到一个无限循环,同一个元素一直被打印,直到我终止程序。这是我的hasNext和next方法的代码(光标跟踪哈希表中的下一个活动单元格,因为该表不会按顺序填充,而活动表示该单元格正在被占用):

public boolean hasNext()
{
布尔项=假;
//下一步:
while(entry==false&&cursor=表格长度)
{
抛出新的NoSuchElementException();//检查-myexceptioN?
}
其他的
{
while(游标
如果您有一个元素,那么
next()
方法应该返回该游标下的元素(正如它所做的那样),然后更新游标(它没有)。因此,您的代码始终保持在相同的元素上,因为hasNext将使用相同的光标位置调用


在下一个方法中获得值后,您需要将光标移动到下一个位置。

正如用户Ryan J在评论中所说,您应该携手使用next()和hasNext()方法。您需要在调用next之后增加光标

    public Object next() {
        if (cursor >= table.length  || table[cursor].active == true 
             || table[cursor] == null) {
            throw new NoSuchElementException(); 
        }

        return table[cursor++].element;
    }

您是否尝试过单步执行调试器?哪些行永远不会到达?通常,当您实现迭代器时,您会维护一个指向集合中您所在位置的“指针”(
cursor
hasNext()
只需返回当前指针的下一个位置是否包含有效数据,并返回
true/false
。每次调用它时,您似乎都在重新计算光标位置,这是非常低效的。调用
next()
时,它实际上应该返回下一项,并递增指针。这两种方法应该齐头并进,以提供迭代器功能。为什么不使用任何java.util.map实现呢?
    public Object next() {
        if (cursor >= table.length  || table[cursor].active == true 
             || table[cursor] == null) {
            throw new NoSuchElementException(); 
        }

        return table[cursor++].element;
    }