Java Iterator.hasNext() 始终为 true

Zen*_*ser -2 java iterator object hashmap infinite-loop

我已经检查过像这样的其他问题,但似乎我并不总是创建一个新的迭代器来检查始终相同的对象。

这是代码

        Iterator<Map.Entry<Node, Float>> it = graph.nodeNeighboursIterator(e); 
        System.out.println("extracted node "+ e.getLabel() + " number of neighbours "+ e.sizeNeighbours());
        while(it.hasNext()) {
            System.out.print(i + " " + e.getLabel() + " " + it +"-");
            i++;
        }
Run Code Online (Sandbox Code Playgroud)

该方法graph.nodeNeighboursIterator执行此操作

public Iterator<Map.Entry<Node, Float>> nodeNeighboursIterator(Node n) {
    return this.graph_weighted.get(n).entrySet().iterator();
}
Run Code Online (Sandbox Code Playgroud)

打印System.out.println("extracted node "+ e.getLabel() + " number of neighbours "+ e.sizeNeighbours());出正确数量的邻居,但循环仍然没有结束他的循环,你对此有何看法?

use*_*er7 5

it.hasNext()检查是否有更多数据要返回。这不会消耗数据(换句话说,不会迭代数据)。此操作是幂等的

这就是为什么你的循环永远不会结束的原因。

您需要通过调用来实际消费数据it.next()it.hasNext()如果没有更多元素可返回,则返回 false。