我已经检查了其他问题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());
显示正确数量的邻居,但是循环并没有结束他的循环,您对此有何看法?
答案 0 :(得分:4)
it.hasNext()
检查是否有更多数据要返回。这不会不消耗数据(换句话说,不会迭代数据)。此操作是幂等。
这就是循环永远不会结束的原因。
您实际上需要通过调用it.next()
来消耗数据。如果没有其他要返回的元素,则it.hasNext()
返回false。
答案 1 :(得分:1)
您需要将代码修改为如下所示
while(it.hasNext()) {
it.next();
}