I just learned about how the Java Collections Framework implements data structures in linked lists. From what I understand, Iterators are a way of traversing through the items in a data structure such as a list. Why is this interface used? Why are the methods hasNext(), next() and remove() not directly coded to the data structure implementation itself?
From the Java website: link text
public interface Iterator<E>
An iterator over a collection. Iterator takes the place of Enumeration in the Java collections framework. Iterators differ from enumerations in two ways:
- Iterators allow the caller to remove elements from the underlying collection during the iteration with well-defined semantics.
- Method names have been improved.
This interface is a member of the Java Collections Framework.
I tried googling around and can’t seem to find a definite answer. Can someone shed some light on why Sun chose to use them? Is it because of better design? Increased security? Good OO practice?
Any help will be greatly appreciated. Thanks.
Because it supports the basic operations that would allow a client programmer to iterate over any kind of collection (note: not necessarily a
Collectionin theObjectsense).They are, they’re just marked Private so you can’t reach into them and muck with them. More specifically:
Iteratorsuch that it does something the standard ones don’t do, without having to alter the actual object it iterates over.Iteratorsto however many clients you wish, and each client may traverse in their own time, at their own speed.Iteratorsfrom the java.util package in particular will throw an exception if the storage that backs them is modified while you still have anIteratorout. This exception lets you know that theIteratormay now be returning invalid objects.For simple programs, none of this probably seems worthwhile. The kind of complexity that makes them useful will come up on you quickly, though.