Java.Core.What happens if you call Iterator.next() without first calling Iterator.hasNext()?

❓ What happens if you call iterator.next() without hasNext()?

👉 Answer:

If there is a next element, then next() simply returns it — no problem.

But if the iterator is already at the end, and you don’t check hasNext(), then calling next() will throw:

⚠️ java.util.NoSuchElementException

example

List<String> list = List.of("A", "B");
Iterator<String> it = list.iterator();

System.out.println(it.next()); // "A"
System.out.println(it.next()); // "B"
System.out.println(it.next()); // 💥 NoSuchElementException

There’s no hasNext() check here — so next() is blindly called after the last element.


🧠 So, is hasNext() required?

Technically, no — Java won’t stop you from calling next() directly. But:

  • You should always use hasNext() to check before calling next().
  • It’s defensive programming: you avoid errors by confirming there’s something to get.

✅ Safe Looping Pattern:

Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String item = it.next(); // always safe
    System.out.println(item);
}

💬 Summary

ActionResult
hasNext()true + next()✅ Returns next element
hasNext()false + next()❌ Throws NoSuchElementException
Call next() without hasNext()Risky — may crash if no next
This entry was posted in Без рубрики. Bookmark the permalink.