Enumeration, Iterator and ListIterator in Java

Both Enumeration and Iterator are interfaces in Java for getting successive elements. Enumeration is older while iterator was introduced later with some improvements. So it is preferred to use Iterator, but we will see Enumeration as well quickly.


Enumeration interface

Enumeration interface has two methods:

  • hasMoreElements()

  • nextElement()


Iterator interface

Iterators differ from enumerations by adding an optional remove operation, and having shorter method names. 

Methods of Iterator are:

  • hasNext()

  • next()

  • remove()

 Iterator is the super interface for the Collection interface. 

The Iterable interface with only one method for returning an Iterator.

Iterator is considered more secure and safe because it does not allow other thread to modify the collection object while some thread is iterating over it and throws ConcurrentModificationException in such cases. 



ArrayList implements Collection interface, which extends Iterable interface:

List<String> list = new ArrayList<String>();





Using Iterator we can Iterate the list as:

Iterator it = list.iterator();





This is because ArrayList implements Iterable and has the iterator() method available.


You can also directly use an Iterable implementation in the enhanced for loop without explicitely creating an Iterator:

for(String s:list)





Iterators vs. Enumerations

  1. Iterator has taken the place of Enumeration in the Java collections framework.

  2. Iterator is considered more secure and safe. 

  3. Java Specification recommends new implementations to consider using Iterator in preference to Enumeration as the functionality of Enumeration interface is duplicated by the Iterator interface with major improvements. 

  4. Enumerations might be faster compared to Iterators due to their read only nature. Still it would be better to go with Iterators as it is the Java recommendation. StringTokenizer is one method in Java that still uses Enumeration.



ListIterator is a sub-interface of Iterator.

ListIterator allows the programmer to traverse the list in either direction, modify the list during iteration, and obtain the iterator's current position in the list.

A ListIterator has no current element; its cursor position always lies between the element that would be returned by a call to previous() and the element that would be returned by a call to next().

The java.util.List has a listIterator() method that returns a listIterator over the elements in this list (in proper sequence). 


Methods of a ListIterator are:

  • add(E e)

  • hasNext()

  • hasPrevious()

  • next(), returns E

  • nextIndex()

  • previous(), returns E

  • previousIndex()

  • remove()

  • set(E e) 

Note that E is a generic type and any type can be specified. 


I know Iterator is an interface and which has 3 methods mentioned above. I saw the java source code as,

public interface Iterable<T> {

   Iterator<T> iterator();

Here we define an iterator method and its type is the interface Iterator<T>.  I see, in the class " AbstractList " it is implemented as,

 public Iterator<E> iterator() {
        return new Itr();

Here we are creting an object of  "AbstractList " and reference pointing to the interface "Iterator". why we pointing the reference to an interface, eventhough the "AbstractList " implementing List interface, when we call collection.iterator, we can execute only 3 mthods defined in the Iteratoe interface. is this the way of restricting us from executing methods of List interface? what is the use of keeping object reference to an interface?

I am really confused with pointing the object reference to interface, Heartin please help me to get a clarification on this


Was it useful?

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)