Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App

Related Articles

Difference Between Iterator and Spliterator in Java

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

The Java Iterator interface represents an object capable of iterating through a collection of Java objects, one object at a time. The Iterator interface is one of the oldest mechanisms in Java for iterating collections of objects (although not the oldest — Enumerator predated Iterator).

Moreover, an iterator differs from the enumerations in two ways:

1. Iterator permits the caller to remove the given elements from the specified collection during the iteration of the elements.

2. Method names have been enhanced.


// Java program to illustrate Iterator interface
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class JavaIteratorExample1 {
    public static void main(String[] args)
        // create a linkedlist
        List<String> list = new LinkedList<>();
        // Add elements
        // print the list to the console
        System.out.println("The list is given as : "
                           + list);
        // call iterator on the list
        Iterator<String> itr = list.iterator();
        // itr.hasNext() returns true if there
        // is still an element next to the current
        // element pointed by iterator
        while (itr.hasNext()) {
            // Returns the next element.
        // Removes the last element.
        // print the list after removing an
        // element
            "After the remove() method is called : "
            + list);


The list is given as : [Welcome, to, our, website]
After the remove() method is called : [Welcome, to, our]

Like Iterator and ListIterator, Spliterator is a Java Iterator, which is used to iterate elements one-by-one from a List implemented object.

The main functionalities of Spliterator are: 

  • Splitting the source data
  • Processing the source data

The Interface Spliterator is included in JDK 8 for taking the advantages of parallelism in addition to sequential traversal. It is designed as a parallel analogue of an iterator.


// Java program to illustrate a Spliterator
import java.util.*;
public class InterfaceSpliteratorExample {
    public static void main(String args[])
        // Create an object of array list
        ArrayList<Integer> list = new ArrayList<>();
        // Add elements to the array list
        // create a stream on the list
        Stream<Integer> str =;
        // Get Spliterator object on stream
        Spliterator<Integer> splitr = str.spliterator();
        // Get size of the list
        // encountered by the
        // forEachRemaining method
        System.out.println("Estimate size: "
                           + splitr.estimateSize());
        // Print getExactSizeIfKnown
        // returns exact size if finite
        // or return -1
        System.out.println("Exact size: "
                           + splitr.getExactSizeIfKnown());
        // Check if the Spliterator has all
        // the characteristics
        System.out.println("Boolean Result: "
                           + splitr.hasCharacteristics(
        System.out.println("Elements of ArrayList :");
        // print elements using forEachRemaining
            (n) -> System.out.println(n));
        // Obtaining another Stream to the array list.
        Stream<Integer> str1 =;
        splitr = str1.spliterator();
        // Obtain spliterator using     trySplit() method
        Spliterator<Integer> splitr2 = splitr.trySplit();
        // If splitr can be partitioned use splitr2 first.
        if (splitr2 != null) {
            System.out.println("Output from splitr2: ");
                (n) -> System.out.println(n));
        // Now, use the splitr
        System.out.println("Output from splitr1: ");
            (n) -> System.out.println(n));


Estimate size: 5
Exact size: 5
Boolean Result: true
Elements of ArrayList :
Output from splitr2: 
Output from splitr1: 

Difference between Iterator and Spliterator in java :



Introduced in Java 1.2Introduced in Java 1.8
Iterator only iterates elements individuallySpliterator traverse elements individually as well as in bulk
It is an iterator for whole collection APIIt is an iterator for both Collection and Stream API, except Map implementation classes 
It uses external iterationIt uses internal iteration. 
It is a Universal iterator It is Not a Universal iterator 
It does not support parallel programmingIt supports parallel programming by splitting the given element set so that each set can be processed individually.

My Personal Notes arrow_drop_up
Last Updated : 15 Oct, 2020
Like Article
Save Article
Similar Reads
Related Tutorials