VOOZH about

URL: https://www.geeksforgeeks.org/java/java-implementing-iterator-and-iterable-interface/

⇱ Java | Implementing Iterator and Iterable Interface - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Java | Implementing Iterator and Iterable Interface

Last Updated : 11 Jul, 2025
Iterators are used in Collection framework in Java to retrieve elements one by one. For more details and introduction related to this, see this link.

Why it is needed to implement Iterable interface?

Every class that implements Iterable interface appropriately, can be used in the enhanced For loop (for-each loop). The need to implement the Iterator interface arises while designing custom data structures. Example:
for(Item item: customDataStructure) {
 // do stuff
}

How to implement Iterable interface?

To implement an iterable data structure, we need to:
  1. Implement Iterable interface along with its methods in the said Data Structure
  2. Create an Iterator class which implements Iterator interface and corresponding methods.
We can generalize the pseudo code as follows: Note: The Iterator class can also, be implemented as an inner class of the Data Structure class since it won't be used elsewhere.
  1. How next() and hasNext() work? To implement an Iterator, we need a cursor or pointer to keep track of which element we currently are on. Depending on the underlying data structure, we can progress from one element to another. This is done in the next() method which returns the current element and the cursor advances to next element. Before advancing the pointer, we check whether next element exists. i.e. we can picturize the behind-the-scenes code as follows:
    While(iterator.hasNext()) { //if next element exists
     next(); // advance the pointer
    }
    
  2. Initializing the cursor The cursor initialization completely depends on the data structure. For example, in a linked list we would initialize cursor to the head element. In an array list, we would initialize cursor to the 0th element. From the point of view of implementation:
    • If the Iterator class is implemented as an inner class, we can simply use "this" keyword (e.g. cursor = CustomDataStructure.this.element) to access the desired element
    • If the Iterator class is implemented as a separate class, we can pass this object of the data structure to the iterator class constructor as demonstrated in the example below.
Below program illustrates the use of Iterable interface: Given below is a Custom Linked List which makes use of Generics. The linked list consists of Node objects which contain a Generic data value and pointer to next node. The class provides some standard 'get' methods like getHead() and getTail(), and the necessary Iterator() function, which has to be implemented while implementing Iterable interface. Then the necessary custom class 'ListIterator' is created, which will implement the Iterator interface, along with it the functionalities of hasNext() and next() are also to be implemented. These two functions form the core of Iterable and Iterator interface.
Output:
abc
mno
pqr
xyz
Comment
Article Tags:
Article Tags: