Iterators
The Iterator Interface
Manually driving an Iterator
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
List<String> names = new ArrayList<>(List.of("Ann", "Ben", "Cid"));
Iterator<String> it = names.iterator();
while (it.hasNext()) {
String name = it.next();
System.out.println(name);
}Ann Ben Cid
Why You Need Iterator to Remove Safely
The broken version — modifying a list during a for-each loop
import java.util.ArrayList;
import java.util.List;
List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3, 4, 5));
for (Integer n : numbers) {
if (n % 2 == 0) {
numbers.remove(n); // throws ConcurrentModificationException
}
}The fix — removing through the Iterator
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3, 4, 5));
Iterator<Integer> it = numbers.iterator();
while (it.hasNext()) {
int n = it.next();
if (n % 2 == 0) {
it.remove(); // safe: removes the element just returned by next()
}
}
System.out.println(numbers);[1, 3, 5]
ListIterator — Bidirectional Iteration
ListIterator moving backwards
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
List<String> letters = new ArrayList<>(List.of("A", "B", "C"));
ListIterator<String> lit = letters.listIterator(letters.size());
while (lit.hasPrevious()) {
System.out.println(lit.previous());
}C B A
Capability | Iterator | ListIterator |
|---|---|---|
Forward traversal | Yes | Yes |
Backward traversal | No | Yes |
Safe removal during iteration | Yes (remove()) | Yes (remove()) |
Add/replace elements during iteration | No | Yes (add()/set()) |
Available on | Any Collection | List implementations only |
Iterator exposes hasNext(), next(), and remove()
The for-each loop is built on Iterator under the hood
Removing from a collection any other way while iterating throws ConcurrentModificationException
Call remove() on the Iterator itself to delete elements safely mid-loop
ListIterator adds backward traversal plus in-place add()/set() for lists