Difference Between Iterator and Spliterator in Java - GeeksforGeeks

15 Oct, 2020
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
java-interfaces
Difference Between
Java
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Difference between var, let and const keywords in JavaScript
Difference Between Method Overloading and Method Overriding in Java
Difference between Prim's and Kruskal's algorithm for MST
Difference between Internal and External fragmentation
Differences and Applications of List, Tuple, Set and Dictionary in Python
Arrays in Java
Split() String method in Java with examples
For-each loop in Java
Arrays.sort() in Java with examples
Reverse a string in Java