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


