【发布时间】:2016-07-26 00:28:20
【问题描述】:
我在 if 语句中不断崩溃并获得 java.util.NoSuchElementException。我的印象是 while(Iterator.hasNext()) 确保 Iterator.next() 调用不会导致缓冲区溢出。
什么是循环遍历两个嵌套迭代器的正确算法,并在找到匹配项时从其中一个迭代器中删除元素,而不抛出这样的异常(我认为是由于超出数组边界)?
在此处输入代码 {
Iterator<Integer> d = entitiesDeleteQueue.iterator();
Iterator<Entity> e = entities.iterator();
while (d.hasNext()) {
while (e.hasNext()) {
if (d.next() == e.next().getEntityId())
e.remove();
}
}
}
【问题讨论】:
-
你应该考虑一下如果
entities有三个元素,而entitiesDeleteQueue有两个元素会发生什么。您可能想在纸上运行它。 -
d.next() 将在最后一次 e.hasNext() 迭代中溢出。谢谢。
-
另外,我看到每次调用 next() 时我都在循环内推进最外层的迭代器。我想要的效果是嵌套 for 循环的效果,其中外循环的每次迭代都会将一个外部元素与每个内部元素进行比较。为了实现这一点,我必须调用外部循环的迭代器元素而不推进它,而我在内部循环中。有没有办法做到这一点?
标签: java iterator nested nosuchelementexception