Я продолжаю сбой и получаю java.util.NoSuchElementException в инструкции if. У меня создалось впечатление, что while (Iterator.hasNext()) гарантирует, что вызов Iterator.next() не вызовет переполнение буфера.Удаление элемента из внутреннего вложенного Iterator в java вызывает NoSuchElementException
Что такое правильный алгоритм перебора два вложенных друг в друг итераторов, и удалить элементы из одного из итераторы, когда найдено совпадение, не бросает такое исключение (который я думаю вызвано обгонной границу массива)?
введите код здесь {
Iterator<Integer> d = entitiesDeleteQueue.iterator();
Iterator<Entity> e = entities.iterator();
while (d.hasNext()) {
while (e.hasNext()) {
if (d.next() == e.next().getEntityId())
e.remove();
}
}
}
Вы должны точно рассмотреть, что произойдет, если 'сущности' имеют три элемента, а' entitiesDeleteQueue' - два. Возможно, вы захотите запустить его на бумаге. –
d.next() будет переполняться на последней итерации e.hasNext(). Спасибо. – DayTripperID
Кроме того, я вижу, что я продвигаю самый внешний итератор внутри цикла каждый раз, когда вызывается next(). Эффект, который я хочу, - это вложенный цикл, где каждая итерация внешнего цикла сравнивает один внешний элемент с каждым внутренним элементом. Чтобы достичь этого, мне пришлось бы вызывать элемент итератора внешнего цикла, не продвигая его, пока я во внутреннем цикле. Есть ли способ достичь этого? – DayTripperID