Iterator pattern provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
The iterator pattern decouples algorithms from containers; in some cases, algorithms are necessarily container-specific and thus cannot be decoupled.
The examples in Java's core libraries
All implementations of java.util.Iterator(thus among others also java.util.Scanner).
All implementations of java.util.Enumeration.