For traversing collection elements, the Kotlin standard library supports the commonly used mechanism of iterators – objects that provide access to the elements sequentially without exposing the underlying structure of the collection. Iterators are useful when you need to process all the elements of a collection one-by-one, for example, print values or make similar updates to them.
Once you obtain an iterator, it points to the first element of a collection; calling the
next() function returns this element and moves the iterator position to the following element if it exists.
Once the iterator passes through the last element, it can no longer be used for retrieving elements; neither can it be reset to any previous position. To iterate through the collection again, create a new iterator.
Another way to go through an
Iterable collection is the well-known
for loop. When using
for on a collection, you obtain the iterator implicitly. So, the following code is equivalent to the example above:
Finally, there is a useful
forEach() function that lets you automatically iterate a collection and execute the given code for each element. So, the same example would look like this:
For lists, there is a special iterator implementation:
ListIterator. It supports iterating lists in both directions: forwards and backwards.
Backward iteration is implemented by the functions
previous(). Additionally, the
ListIterator provides information about the element indices with the functions
Having the ability to iterate in both directions, means the
ListIterator can still be used after it reaches the last element.
In addition to removing elements, the
MutableListIterator can also insert and replace elements while iterating the list.