Java.Core.How will collection behave if iterator.remove() is called?

👉 Short Answer:

It removes the last element returned by next() from the underlying collection.


🧪 Example:

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

while (it.hasNext()) {
    String val = it.next();
    if (val.equals("B")) {
        it.remove(); // removes "B" from the list
    }
}
System.out.println(list); // Output: [A, C]

💬 What’s going on:

  • it.next() moves to "B".
  • it.remove() then removes "B" from the actual list.

⚠️ Important Rules for iterator.remove()

❌ 1. You must call next() before remove()

Iterator<String> it = list.iterator();
it.remove(); // ❌ IllegalStateException — no prior call to next()

❌ 2. You can’t call remove() twice in a row without calling next() again

String val = it.next();
it.remove();     // ✅ OK
it.remove();     // ❌ IllegalStateException — must call next() again first

💡 Why use iterator.remove()?

Because it’s the only safe way to remove elements from a collection during iteration.

❌ This will fail:

for (String s : list) {
    if (s.equals("B")) {
        list.remove(s); // ❌ ConcurrentModificationException
    }
}

✅ This is safe:

Iterator<String> it = list.iterator();
while (it.hasNext()) {
    if (it.next().equals("B")) {
        it.remove(); // ✅ Safe and correct
    }
}

This entry was posted in Без рубрики. Bookmark the permalink.