# iterator property

Iterator<E> iterator

Returns a new `Iterator` that allows iterating the elements of this `Iterable`.

Iterable classes may specify the iteration order of their elements (for example List always iterate in index order), or they may leave it unspecified (for example a hash-based Set may iterate in any order).

Each time `iterator` is read, it returns a new iterator, which can be used to iterate through all the elements again. The iterators of the same iterable can be stepped through independently, but should return the same elements in the same order, as long as the underlying collection isn't changed.

Modifying the collection may cause new iterators to produce different elements, and may change the order of existing elements. A List specifies its iteration order precisely, so modifying the list changes the iteration order predictably. A hash-based Set may change its iteration order completely when adding a new element to the set.

Modifying the underlying collection after creating the new iterator may cause an error the next time Iterator.moveNext is called on that iterator. Any modifiable iterable class should specify which operations will break iteration.

## Implementation

    Iterator<E> get iterator {
      // Note: NodeLists are not fixed size. And most probably length shouldn't
      // be cached in both iterator _and_ forEach method. For now caching it
      // for consistency.
      return new FixedSizeListIterator<E>(this);
    }