# 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.
    Specified by:
      `hasNext` in interface `Iterator<E>`
    Returns:
      `true` if there are more elements, `false` otherwise.
    See Also:
      - `next()`

  - ### hasPrevious

    boolean hasPrevious()
    Returns whether there are previous elements to iterate.
    Returns:
      `true` if there are previous elements, `false` otherwise.
    See Also:
      - `previous()`

  - ### next

    E next()
    Returns the next object in the iteration.
    Specified by:
      `next` in interface `Iterator<E>`
    Returns:
      the next object.
    Throws:
      `NoSuchElementException` - if there are no more elements.
    See Also:
      - `hasNext()`

  - ### nextIndex

    int nextIndex()
    Returns the index of the next object in the iteration.
    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:
      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.
    Specified by:
      `remove` in interface `Iterator<E>`
    Throws:
      `UnsupportedOperationException` - if removing is not supported by the list being iterated.
      `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`.

  - ### 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` - if `next` or `previous` have not been called, or `remove` or `add` have already been called after the last call to `next` or `previous`.