Difference Between Iterator and Spliterator in Java

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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);
    }
}

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


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.

Attention reader! Don’t stop learning now. Get hold of all the important Java and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.