Saturday, October 2, 2010

What is difference between Enumeration and Iterator in Java?

Though both Iterator and Enumeration allows you to traverse over elements of Collections in Java, there is some significant difference between them e.g. Iterator also allows you to remove elements from collection during traversal but Enumeration doesn't allow that, it doesn't got the remove() method. Enumeration is also a legacy class and not all Collection supports it e.g. Vector supports Enumeration but ArrayList doesn't. On the other hand Iterator is the standard class for iteration and traversal. By the way,  what is difference between Enumeration and Iterator in Java?  This question is from early ages of  Java interview , I have not seen this question on recent interviews but it was quite common during 2000 to 2007 period, now days questions like implementation of HashMap or ConcurrentHashMap etc has taken its place, nonetheless its very important to know the fundamental difference between Iterator and Enumeration. Some time its also asked as Iterator vs Enumeration or Enumeration vs Iterator which is same. Important point to note is that both Iterator and Enumeration provides way to traverse or navigate through entire collection in Java.

Iterator vs Enumeration

difference between iterator and enumeration in javaBetween Enumeration and Iterator, Enumeration is older and its there from JDK1.0, while iterator was introduced later. Iterator can be used with ArrayList, HashSet and other collection classes.  Another similarity between Iterator and Enumeration in Java is that  functionality of Enumeration interface is duplicated by the Iterator interface.

Only major difference between Enumeration and iterator is Iterator has a remove() method while Enumeration doesn't. Enumeration acts as Read-only interface, because it has the methods only to traverse and fetch the objects, where as by using Iterator we can manipulate the objects like adding and removing the objects from collection e.g. Arraylist.

Also Iterator is more secure and safe as compared to Enumeration because it  does not allow other thread to modify the collection object while some thread is iterating over it and throws ConcurrentModificationException. This is by far most important fact for me for deciding between Iterator vs Enumeration in Java.

In Summary both Enumeration and Iterator will give successive elements, but Iterator is new and improved version where method names are shorter, and has new method called remove. Here is a short comparison:

Enumeration
hasMoreElement()
nextElement()
N/A


Iterator
hasNext()
next()
remove()

So Enumeration is used when ever we want to make Collection objects as Read-only.

If you are looking for some quality interview questions you can also check


20 comments :

Javin @ Tibco RV Tutorial said...

Thanks Jeune. you liked the post this is common interview question in java and I wanted to keep it short and simple.

Javin @ Tibco RV Tutorial said...

Thanks Gautam.

bhabani pattanayak said...

Hey nice1,
B in touch so that we can discuss some java things,
Bcoz u hav lots of working experience(7years) that can help me a lot,

Anonymous said...

This same interview question "What is difference between Iterator and Enumeration is asked to one of my friend Rashmi which has appeared in a java interview. thanks dude.

Javin @ tibco tutorials for beginners said...

hi Anonymous Iterator vs Enumeration is indeed a common question glad you find my blog post about iterator and enumeration useful.

Anonymous said...

In terms of performance which one is better between Enumeration and Iterator that could be the real big difference between Iterator and Enumeration. my guess is on Iterator because its new one and Enumeration is older one.

Anonymous said...

Can you please explain What is difference between HashMap iterator and ArrayList Iterator , thanks ?

Rajiv Goel said...

@Anonymous, your Guess is write Iterator has better performance than Enumeration and use of Iterator is recommended over Enumeration in Java.

Anonymous said...

Iterator is synchronized and enumeration is not.

Still Iterator vs Enumeration ..... said...

Iterator vs Enumeration is very old concept, I am not sure why people still ask Enumeration vs iterator, difference between iterator and enumeration, these questions doesn't make any sense of world of advanced Java and highly concurrent and scalable system's world.

Anonymous said...

I really enjoy reading your blogs. Your lets me dive deeply into the concepts but in very easy way.

Vijay R said...

Hi Paul, I have a requirement where i need to traverse through the Map and change the value objects in it on some condition.... but i found concurrentmodification exception..... how do i achieve to satisfy my req....

Javin @ iterate map in java said...

Hi Vijay which kind of Map are you using ? You need to make sure no thread modify Map while you are iterating over it, if its not a ConcurrentHashMap and only use Iterator.remove() method for removing items from Map.

Anonymous said...

Sir, i have a question, in your blog, you are asking that "Also Iterator is more secure and safe as compared to Enumeration because it does not allow other thread to modify the collection object while some thread is iterating over it and throws ConcurrentModificationException." And with this point, you decide whether you are going to use Iterator or Enumeration, but as you mention that with Enumeration we can not change the contents of collection. So there is no comparison between two on this point, because Enumeration has no such functionality to update the contents.

Anonymous said...

One important point to note about Iterator's remove method is that it will throw IllegalStateException if you call remove() without calling next() method of Iterator. Also you can only call remove() method one time in one iteration. Things gets more tricky when you are using ListIterator where call to remove can only be add after calling next() or prev() and without any call to add() or remove method.

Anonymous said...

One more diff is that next() in Iterator doesnt need any casting where as nextElement() in Enumeration returns Object and hence casting is required.

Anonymous said...

is iterator synchronized?

babapua said...

ConcurrentModificationException has nothing to do with thread safety according to a stackoverflow reply I recently read...

Anonymous said...

Hi javin... i like reading your blogs.. but i have little doubt here.
1. as Iterator interface can iterate on any collection with an iterator method which returns us Iterator type object.
do we have any method for Enumeration Interface.????
or we can traverse through only vector which has element method.???? i'm confused

Javin Paul said...

Hello @Anonymous, Thanks for your comments. Actually iterator() method comes from java.lang.Iterable interface, all Collection classes implements this interface, which also allows them to be used as target of "foreach" loop. There is no similar interface for Enumeration, as you know its convention to return Enumeration by calling elements() method, which you see in Vector and other classes which allows you to enumerate.

Post a Comment