interfaces. This is useful when you have data that must be iterated on and may hold resources in the underlying implementation that must be closed.
Some implementations may close resources automatically when the iterator is finished being iterated on however
this is an implementation detail and all callers should call
method to be
sure all resources are freed properly.