Java Iterator.hasNext() 总是正确的

Java Iterator.hasNext() always true

我已经检查了其他问题 但似乎我并不总是创建一个新的迭代器来检查相同的对象。

这是代码

        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++;
        }

方法 graph.nodeNeighboursIterator 执行此操作

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

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

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

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

您需要通过调用 it.next() 实际使用数据。 it.hasNext() return 如果没有更多元素到 return,则为 false。

您需要将代码修改为如下所示

while(it.hasNext()) {
    it.next();
}