Interview Question - Iterator vs Enumeration
Iterator vs EnumerationEnumeration is a legacy interface; it is from Java version 1.0. In Java version 1.2, the Collections framework was added, which essentially replaced the old collection classes with new ones (for example: Vector -> ArrayList, Hashtable -> HashMap, Enumeration -> Iterator etc.).
Enumeration can be applied to Vector and HashTable. Iterator can be used with most of the Collection objects.
Interface difference
Enumeration is the old Interface for legacy classes like Hashtable and Vector.
Enumeration gives a static read-only view; you can only "read" the contents of the collection.
It contains 2 methods namely hasMoreElements() & nextElement().
Iterator is for the new classes most of the Collection objects like HashSet,HashMap.
Iterator contains three methods namely hasNext(), next(),remove().
Using remove() method, we can delete the object safely when iterate collection, but Enumeration interface does not support this feature, it doesn't provide "no safe way" to remove elements from a collection while traversing.
Also Iterator's sub Interfac ListIterator provides previous and hasPrevious function for backward traversal, and add, set method to insert and modify object.
Performance
Because Iterator needs to check for modifications, this would decrease performance slightly, but normally that's negligible.
Fail-safe
Iterator is fail-safe, because it always denies other threads to modify the collection object which is being iterated by it. Whenever a second thread tries for that Iterator will throw a ConcurrentModificationException. Iterators that do this are known as fail-fast iterators, as they fail quickly and cleanly.
If possible, we should always use Iterator.
Resources:
http://www.coderanch.com/forums/posts/watch/0/407217
http://javabeanz.wordpress.com/2007/06/29/iterator-vs-enumeration/
http://www.sap-img.com/java/when-to-use-enumeration-and-when-to-use-iterator.htm