The ListIterator interface of the Java collections framework provides the functionality to access elements of a list.
It is bidirectional. This means it allows us to iterate elements of a list in both the direction.
It extends the Iterator interface.

The List interface provides a listIterator() method that returns an instance of the ListIterator interface.
Methods of ListIterator
The ListIterator interface provides methods that can be used to perform various operations on the elements of a list.
hasNext()- returns true if there exists an element in the listnext()- returns the next element of the listnextIndex()returns the index of the element that thenext()method will returnprevious()- returns the previous element of the listpreviousIndex()- returns the index of the element that theprevious()method will returnremove()- removes the element returned by eithernext()orprevious()set()- replaces the element returned by eithernext()orprevious()with the specified element
Example 1: Implementation of ListIterator
In the example below, we have implemented the next(), nextIndex() and hasNext() methods of the ListIterator interface in an array list.
import java.util.ArrayList;
import java.util.ListIterator;
class Main {
    public static void main(String[] args) {
        // Creating an ArrayList
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(3);
        numbers.add(2);
        System.out.println("ArrayList: " + numbers);
        // Creating an instance of ListIterator
        ListIterator<Integer> iterate = numbers.listIterator();
        // Using the next() method
        int number1 = iterate.next();
        System.out.println("Next Element: " + number1);
        // Using the nextIndex()
        int index1 = iterate.nextIndex();
        System.out.println("Position of Next Element: " + index1);
        // Using the hasNext() method
        System.out.println("Is there any next element? " + iterate.hasNext());
    }
}
Output
ArrayList: [1, 3, 2] Next Element: 1 Position of Next Element: 1 Is there any next element? true
Example 2: Implementation of ListIterator
In the example below, we have implemented the previous() and previousIndex() methods of the ListIterator interface in an array list.
import java.util.ArrayList;
import java.util.ListIterator;
class Main {
    public static void main(String[] args) {
        // Creating an ArrayList
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(3);
        numbers.add(2);
        System.out.println("ArrayList: " + numbers);
        // Creating an instance of ListIterator
        ListIterator<Integer> iterate = numbers.listIterator();
        iterate.next();
        iterate.next();
        // Using the previous() method
        int number1 = iterate.previous();
        System.out.println("Previous Element: " + number1);
        // Using the previousIndex()
        int index1 = iterate.previousIndex();
        System.out.println("Position of the Previous element: " + index1);
    }
}
Output
ArrayList: [1, 3, 2] Previous Element: 3 Position of the Previous Element: 0
In the above example, initially, the instance of the Iterator was before 1. Since there was no element before 1 so calling the previous() method will throw an exception.
We then used the next() methods 2 times. Now the Iterator instance will be between 3 and 2.
Hence, the previous() method returns 3.