An Iterator can iterate in only one direction (forward direction), whereas ListIterator can iterate in both forward and back directions. We can add or set a value at any time in the lifespan of the ListIterator. ListIterator maintains two pointers viz. previous and next.

An Iterator can be used to iterate over a list, set, or map structure. But a ListIterator is only used to iterate through a list. For example

Due to above-mentioned differences, a ListIterator has two extra functions called hasPrevious() and previous().

An iterator is a superclass of ListIterator. With ListIterator, you can obtain the index at any point but this cannot be done in the Iterator. An example interface can be seen below:

You can also start iteration from any index if you are using ListIterator. E.g. it provided an overloaded constructor called ListIterator(int startingIndex).