Implement the Iterator Pattern
Part I
We are going to implement our iterator for ArrayIndexedList
(instead of using the Arrays.stream(data).iterator
).
-
Add a new class
ArrayIndexedListIterator
:public class ArrayIndexedListIterator<T> { }
-
ArrayIndexedListIterator
must implement theIterator
interface:public class ArrayIndexedListIterator<T> implements Iterator<T> { }
-
The following operations from the
Iterator
interface are inherited (and need to be implemented):public class ArrayIndexedListIterator<T> implements Iterator<T> { @Override public boolean hasNext() { return false; } @Override public T next() { return null; } }
Let us understand these methods first!
When we use the enhanced for loop, we are using syntactic sugar:
Iterator<MyType> it = myCollection.iterator();
while (it.hasNext()) {
MyType element = it.next();
// do something with element
}
// the loop above is the same as the one below
for(MyType element : myCollection) {
// do something with element
}
From the while
loop, it is clear the next
method returns the next element in the collection. And, hasNext
returns true if there is an element we have not iterated over.