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();
}
我已经检查了其他问题
这是代码
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();
}