Advanced Java September 27 ,2025

Iterator Design Pattern in Java

1. Introduction

The Iterator Pattern provides a way to sequentially access elements of a collection without exposing its internal structure.

Instead of the client needing to know whether a collection is an array, list, or tree, the iterator hides this complexity and provides a simple interface to loop through elements.

2. Real-Life Analogy

Think about a TV remote:

  • You press the next channel button, and it switches to the next channel in sequence.
  • You don’t need to know how channels are stored or processed internally; you just move to the next one.

Similarly, in collections, the iterator gives you access to elements one by one without exposing the underlying details.

3. Structure

  • Iterator (Interface) → Defines methods like hasNext() and next().
  • ConcreteIterator → Implements the Iterator for a collection.
  • Aggregate (Collection Interface) → Defines a method to create an iterator.
  • ConcreteAggregate (Custom Collection) → Implements the collection and returns its iterator.

4. Custom Java Example: Playlist Iterator

We’ll create a Playlist (custom collection) that stores songs and an Iterator to loop through them.

Step 1: Iterator Interface

interface Iterator {
    boolean hasNext();
    T next();
}

Step 2: Aggregate (Collection) Interface

interface IterableCollection {
    Iterator createIterator();
}

Step 3: Concrete Collection (Playlist)

import java.util.ArrayList;
import java.util.List;

class Playlist implements IterableCollection {
    private List songs = new ArrayList<>();

    public void addSong(String song) {
        songs.add(song);
    }

    @Override
    public Iterator createIterator() {
        return new PlaylistIterator(songs);
    }
}

Step 4: Concrete Iterator (PlaylistIterator)

class PlaylistIterator implements Iterator {
    private List songs;
    private int position = 0;

    public PlaylistIterator(List songs) {
        this.songs = songs;
    }

    @Override
    public boolean hasNext() {
        return position < songs.size();
    }

    @Override
    public String next() {
        return songs.get(position++);
    }
}

Step 5: Client Code

public class IteratorPatternDemo {
    public static void main(String[] args) {
        Playlist playlist = new Playlist();
        playlist.addSong("Shape of You");
        playlist.addSong("Blinding Lights");
        playlist.addSong("Perfect");
        playlist.addSong("Levitating");

        Iterator iterator = playlist.createIterator();

        System.out.println("Playlist:");
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

5. Output

Playlist:
Shape of You
Blinding Lights
Perfect
Levitating

6. Benefits

  • Provides a uniform way to iterate over different collections.
  • Hides the internal representation (array, list, tree, etc.).
  • Makes code cleaner and more maintainable.

7. When to Use

  • When you want to provide a consistent way to iterate over a collection.
  • When the internal structure of the collection should remain hidden.
  • Useful when creating custom collections.

 

Next - Mediator Design Pattern in Java

Sanjiv
0

You must logged in to post comments.

Related Blogs

Generics P...
Advanced Java August 08 ,2025

Generics Part- 2

Collection...
Advanced Java July 07 ,2025

Collections Framewor...

Mastering...
Advanced Java August 08 ,2025

Mastering Java Multi...

Annotation...
Advanced Java August 08 ,2025

Annotations

Java Memor...
Advanced Java August 08 ,2025

Java Memory Manageme...

Java Lambd...
Advanced Java August 08 ,2025

Java Lambda Expressi...

Java Funct...
Advanced Java August 08 ,2025

Java Functional Inte...

Java Strea...
Advanced Java August 08 ,2025

Java Stream API

JDBC (Java...
Advanced Java August 08 ,2025

JDBC (Java Database...

JDBC (Java...
Advanced Java September 09 ,2025

JDBC (Java Database...

Annotation...
Advanced Java August 08 ,2025

Annotations

Generics
Advanced Java August 08 ,2025

Generics

Java I/O (...
Advanced Java August 08 ,2025

Java I/O (NIO)

Introducti...
Advanced Java September 09 ,2025

Introduction to Desi...

Design Pat...
Advanced Java September 09 ,2025

Design Patterns in J...

Other Prin...
Advanced Java September 09 ,2025

Other Principles Beh...

Creational...
Advanced Java September 09 ,2025

Creational Design Pa...

In Creatio...
Advanced Java September 09 ,2025

In Creational Design...

In Creatio...
Advanced Java September 09 ,2025

In Creational Design...

Creational...
Advanced Java September 09 ,2025

Creational Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

In Creatio...
Advanced Java September 09 ,2025

In Creational Design...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Builder De...
Advanced Java September 09 ,2025

Builder Design Patte...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Design Pat...
Advanced Java September 09 ,2025

Design Patterns in J...

Chain of R...
Advanced Java September 09 ,2025

Chain of Responsibil...

Command De...
Advanced Java September 09 ,2025

Command Design Patte...

Interprete...
Advanced Java September 09 ,2025

Interpreter Design P...

Mediator D...
Advanced Java September 09 ,2025

Mediator Design Patt...

Memento De...
Advanced Java September 09 ,2025

Memento Design Patte...

Observer D...
Advanced Java September 09 ,2025

Observer Design Patt...

State Desi...
Advanced Java September 09 ,2025

State Design Pattern...

Strategy D...
Advanced Java September 09 ,2025

Strategy Design Patt...

Template M...
Advanced Java September 09 ,2025

Template Method Desi...

Visitor De...
Advanced Java September 09 ,2025

Visitor Design Patte...

Prototype...
Advanced Java September 09 ,2025

Prototype Design Pat...

Java 8+ Fe...
Advanced Java October 10 ,2025

Java 8+ Features

SOLID Prin...
Advanced Java October 10 ,2025

SOLID Principles in...

Custom Imp...
Advanced Java October 10 ,2025

Custom Implementatio...

Custom Imp...
Advanced Java October 10 ,2025

Custom Implementatio...

Custom Imp...
Advanced Java October 10 ,2025

Custom Implementatio...

Custom Imp...
Advanced Java October 10 ,2025

Custom Implementatio...

How Iterat...
Advanced Java October 10 ,2025

How Iterators Work i...

How Concur...
Advanced Java October 10 ,2025

How ConcurrentHashMa...

Comparable...
Advanced Java October 10 ,2025

Comparable vs Compar...

Get In Touch

G06, Kristal Olivine Bellandur near Bangalore Central Mall, Bangalore Karnataka, 560103

+91-8076082435

techiefreak87@gmail.com