ListIterator extends Iterator to allow bidirectional traversal of a list, and the modification of elements. ListIterator is generic interfaces:

interface ListIterator<E>

E specifies the type of objects being iterated.

The methods declared by ListIterator are

void add(E obj)
Inserts obj into the list in front of the element that will be returned by the next call to next( ).
boolean hasNext( )
Returns true if there is a next element. Otherwise, returns false.
boolean hasPrevious( )
Returns true if there is a previous element. Otherwise, returns false.
E next( )
Returns the next element.
int nextIndex( )
Returns the index of the next element. If there is not a next element, returns the size of the list.
E previous( )
Returns the previous element.
int previousIndex( )
Returns the index of the previous element. If there is not a previous element, returns -1.
void remove( )
Removes the current element from the list.
void set(E obj)
Assigns obj to the current element.
import java.util.ArrayList;
import java.util.ListIterator;

public class Main {
  public static void main(String args[]) {
    ArrayList<String> al = new ArrayList<String>();
    ListIterator<String> litr = al.listIterator();
    while (litr.hasNext()) {
      String element =;
      litr.set(element + "+");
    while (litr.hasPrevious()) {
      String element = litr.previous();
      System.out.println(element + " ");

ListIterator can access the collection in either the forward or backward direction and can modify an element. Otherwise, ListIterator is used just like Iterator.

  Java Book