Java Iterator.hasNext()始终为真

时间:2018-08-26 09:10:51

标签: java object hashmap iterator infinite-loop

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

这是代码

        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());显示正确数量的邻居,但是循环并没有结束他的循环,您对此有何看法?

2 个答案:

答案 0 :(得分:4)

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

这就是循环永远不会结束的原因。

您实际上需要通过调用it.next()来消耗数据。如果没有其他要返回的元素,则it.hasNext()返回false。

答案 1 :(得分:1)

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

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