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.