# Interface ListIterator<E>

All Superinterfaces:
  `Iterator<E>`

All Known Implementing Classes:
  `Form.TabIterator`

public interface ListIterator<E> extends Iterator<E>
An ListIterator is used to sequence over a List of objects. ListIterator can move backwards or forwards through the list.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `add(E object)`
  Inserts the specified object into the list between `next` and `previous`.
  `boolean`
  `hasNext()`
  Returns whether there are more elements to iterate.
  `boolean`
  `hasPrevious()`
  Returns whether there are previous elements to iterate.
  `E`
  `next()`
  Returns the next object in the iteration.
  `int`
  `nextIndex()`
  Returns the index of the next object in the iteration.
  `E`
  `previous()`
  Returns the previous object in the iteration.
  `int`
  `previousIndex()`
  Returns the index of the previous object in the iteration.
  `void`
  `remove()`
  Removes the last object returned by `next` or `previous` from the list.
  `void`
  `set(E object)`
  Replaces the last object returned by `next` or `previous` with the specified object.

- ## Method Details

  - ### add

    void add(E object)

    Inserts the specified object into the list between `next` and `previous`. The object inserted will be the previous object.

    ###### Parameters

    - `object`: the object to insert.

    ###### Throws

    - `UnsupportedOperationException`: if adding is not supported by the list being iterated.

    - `ClassCastException`: if the class of the object is inappropriate for the list.

    - `IllegalArgumentException`: if the object cannot be added to the list.

  - ### hasNext

    boolean hasNext()

    Returns whether there are more elements to iterate.

    ###### Returns

    `true` if there are more elements, `false` otherwise.

    ###### See also

    - #next
    Specified by:
      `hasNext` in interface `Iterator<E>`

  - ### hasPrevious

    boolean hasPrevious()

    Returns whether there are previous elements to iterate.

    ###### Returns

    Returns:

      `true` if there are previous elements, `false` otherwise.

      ###### See also

      - #previous

  - ### next

    E next()

    Returns the next object in the iteration.

    ###### Returns

    the next object.

    ###### Throws

    - `NoSuchElementException`: if there are no more elements.

    ###### See also

    - #hasNext
    Specified by:
      `next` in interface `Iterator<E>`

  - ### nextIndex

    int nextIndex()

    Returns the index of the next object in the iteration.

    ###### Returns

    Returns:

      the index of the next object, or the size of the list if the iterator is at the end.

      ###### Throws

      - `NoSuchElementException`: if there are no more elements.

      ###### See also

      - #next

  - ### previous

    E previous()

    Returns the previous object in the iteration.

    ###### Returns

    the previous object.

    ###### Throws

    - `NoSuchElementException`: if there are no previous elements.

    ###### See also

    - #hasPrevious

  - ### previousIndex

    int previousIndex()

    Returns the index of the previous object in the iteration.

    ###### Returns

    Returns:

      the index of the previous object, or -1 if the iterator is at the beginning.

      ###### Throws

      - `NoSuchElementException`: if there are no previous elements.

      ###### See also

      - #previous

  - ### remove

    void remove()

    Removes the last object returned by `next` or `previous` from the list.

    ###### Throws

    - `UnsupportedOperationException`: if removing is not supported by the list being iterated.

    - `IllegalStateException`: @throws IllegalStateException if `next` or `previous` have not been called, or `remove` or `add` have already been called after the last call to `next` or `previous`.

    Specified by:
      `remove` in interface `Iterator<E>`

  - ### set

    void set(E object)

    Replaces the last object returned by `next` or `previous` with the specified object.

    ###### Parameters

    - `object`: the object to set.

    ###### Throws

    - `UnsupportedOperationException`: if setting is not supported by the list being iterated

    - `ClassCastException`: if the class of the object is inappropriate for the list.

    - `IllegalArgumentException`: if the object cannot be added to the list.

    - `IllegalStateException`: @throws IllegalStateException if `next` or `previous` have not been called, or `remove` or `add` have already been called after the last call to `next` or `previous`.