class LinkedList { class Iterator { ... } // and so on }
LinkedList.Iterator i = ...
class List<T> { Iterator find(T value) { ... } Iterator firstElement() { ... } Iterator LastElement() { ... } Iterator next(Iterator i) { ... } Iterator previous(Iterator i) { ... } }
boolean atBeginning() { ... } boolean atEnd() { ... } boolean equals(Iterator i) { ... } T getValue() { ... }
void drunkardsWalk(List<?> l, int steps) int n = l.size() List.Iterator here = l.begin() while steps-- > 0 int m = random(2n) - n while m < 0 ∧ here ≠ l.begin() here = here.previous() ++m while m > 0 ∧ here ≠ l.end() here = here.next() --m f(here.value())
class list<T> void forEach(UnaryFunction<T> f) // call f on every element in the list. UnaryFunction<String> printer = new UnaryFunction<String>(System.out) stringList.forEach(printer)
forEach()
?
List<String> stringList = new ... for (String s: stringList) // operate on s