Open In App

Difference Between Iterator and Spliterator in Java

Last Updated : 15 Oct, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

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




// 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
        list.add("Welcome");
        list.add("to");
        list.add("our");
        list.add("website");
  
        // 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.
            System.out.println(itr.next());
        }
  
        // Removes the last element.
        itr.remove();
  
        // print the list after removing an
        // element
        System.out.println(
            "After the remove() method is called : "
            + list);
    }
}


Output

The list is given as : [Welcome, to, our, website]
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




// Java program to illustrate a Spliterator
  
import java.util.*;
import java.util.stream.Stream;
  
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
        list.add(101);
        list.add(201);
        list.add(301);
        list.add(401);
        list.add(501);
  
        // create a stream on the list
        Stream<Integer> str = list.stream();
  
        // 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(
                                 splitr.characteristics()));
  
        System.out.println("Elements of ArrayList :");
  
        // print elements using forEachRemaining
        splitr.forEachRemaining(
            (n) -> System.out.println(n));
  
        // Obtaining another Stream to the array list.
        Stream<Integer> str1 = list.stream();
  
        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: ");
            splitr2.forEachRemaining(
                (n) -> System.out.println(n));
        }
  
        // Now, use the splitr
        System.out.println("Output from splitr1: ");
        splitr.forEachRemaining(
            (n) -> System.out.println(n));
    }
}


Output

Estimate size: 5
Exact size: 5
Boolean Result: true
Elements of ArrayList :
101
201
301
401
501
Output from splitr2: 
101
201
Output from splitr1: 
301
401
501

Difference between Iterator and Spliterator in java :

Iterator 

Spliterator

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


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads