Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Methods](https://developer.android.com/reference/java/util/ListIterator#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/java/util/ListIterator#inhmethods)

# ListIterator

` public interface ListIterator `   
` implements https://developer.android.com/reference/java/util/Iterator<E> `

|---|
| java.util.ListIterator\<E\> |

<br />

*** ** * ** ***

An iterator for lists that allows the programmer to traverse the list in either direction, modify the list during iteration, and obtain the iterator's current position in the list. A `ListIterator` has no current element; its *cursor position* always lies between the element that would be returned by a call to `previous()` and the element that would be returned by a call to `next()`. An iterator for a list of length `n` has `n+1` possible cursor positions, as illustrated by the carets (`^`) below:

```
                     Element(0)   Element(1)   Element(2)   ... Element(n-1)
cursor positions:  ^            ^            ^            ^                  ^
```
Note that the `https://developer.android.com/reference/java/util/ListIterator#remove()` and `https://developer.android.com/reference/java/util/ListIterator#set(E)` methods are *not* defined in terms of the cursor position; they are defined to operate on the last element returned by a call to `https://developer.android.com/reference/java/util/ListIterator#next()` or `https://developer.android.com/reference/java/util/ListIterator#previous()`.

This interface is a member of the [Java Collections Framework](https://reference/java/util/package-summary.html#CollectionsFramework).
**See also:**

- `https://developer.android.com/reference/java/util/Collection`
- `https://developer.android.com/reference/java/util/List`
- `https://developer.android.com/reference/java/util/Iterator`
- `https://developer.android.com/reference/java/util/Enumeration`
- `https://developer.android.com/reference/java/util/List#listIterator()`

## Summary

| ### Public methods ||
|---|---|
| ` abstract void` | ` https://developer.android.com/reference/java/util/ListIterator#add(E)(E e) ` Inserts the specified element into the list (optional operation). |
| ` abstract boolean` | ` https://developer.android.com/reference/java/util/ListIterator#hasNext()() ` Returns `true` if this list iterator has more elements when traversing the list in the forward direction. |
| ` abstract boolean` | ` https://developer.android.com/reference/java/util/ListIterator#hasPrevious()() ` Returns `true` if this list iterator has more elements when traversing the list in the reverse direction. |
| ` abstract E` | ` https://developer.android.com/reference/java/util/ListIterator#next()() ` Returns the next element in the list and advances the cursor position. |
| ` abstract int` | ` https://developer.android.com/reference/java/util/ListIterator#nextIndex()() ` Returns the index of the element that would be returned by a subsequent call to `https://developer.android.com/reference/java/util/ListIterator#next()`. |
| ` abstract E` | ` https://developer.android.com/reference/java/util/ListIterator#previous()() ` Returns the previous element in the list and moves the cursor position backwards. |
| ` abstract int` | ` https://developer.android.com/reference/java/util/ListIterator#previousIndex()() ` Returns the index of the element that would be returned by a subsequent call to `https://developer.android.com/reference/java/util/ListIterator#previous()`. |
| ` abstract void` | ` https://developer.android.com/reference/java/util/ListIterator#remove()() ` Removes from the list the last element that was returned by `https://developer.android.com/reference/java/util/ListIterator#next()` or `https://developer.android.com/reference/java/util/ListIterator#previous()` (optional operation). |
| ` abstract void` | ` https://developer.android.com/reference/java/util/ListIterator#set(E)(E e) ` Replaces the last element returned by `https://developer.android.com/reference/java/util/ListIterator#next()` or `https://developer.android.com/reference/java/util/ListIterator#previous()` with the specified element (optional operation). |

### Inherited methods

From interface ` https://developer.android.com/reference/java/util/Iterator ` ` default void` ` https://developer.android.com/reference/java/util/Iterator#forEachRemaining(java.util.function.Consumer<?%20super%20E>)(https://developer.android.com/reference/java/util/function/Consumer<? super E> action) `

Performs the given action for each remaining element until all elements have been processed or the action throws an exception.
` abstract boolean` ` https://developer.android.com/reference/java/util/Iterator#hasNext()() `

Returns `true` if the iteration has more elements.
` abstract E` ` https://developer.android.com/reference/java/util/Iterator#next()() `

Returns the next element in the iteration.
` default void` ` https://developer.android.com/reference/java/util/Iterator#remove()() `

Removes from the underlying collection the last element returned by this iterator (optional operation).

## Public methods

### add

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract void add (E e)
```

Inserts the specified element into the list (optional operation). The element is inserted immediately before the element that would be returned by `https://developer.android.com/reference/java/util/ListIterator#next()`, if any, and after the element that would be returned by `https://developer.android.com/reference/java/util/ListIterator#previous()`, if any. (If the list contains no elements, the new element becomes the sole element on the list.) The new element is inserted before the implicit cursor: a subsequent call to `next` would be unaffected, and a subsequent call to `previous` would return the new element. (This call increases by one the value that would be returned by a call to `nextIndex` or `previousIndex`.)

<br />

| Parameters ||
|---|---|
| `e` | `E`: the element to insert <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/ClassCastException` | if the class of the specified element prevents it from being added to this list |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if some aspect of this element prevents it from being added to this list |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` | if the `add` method is not supported by this list iterator |

### hasNext

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract boolean hasNext ()
```

Returns `true` if this list iterator has more elements when traversing the list in the forward direction. (In other words, returns `true` if `https://developer.android.com/reference/java/util/ListIterator#next()` would return an element rather than throwing an exception.)

<br />

| Returns ||
|---|---|
| `boolean` | `true` if the list iterator has more elements when traversing the list in the forward direction <br /> |

### hasPrevious

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract boolean hasPrevious ()
```

Returns `true` if this list iterator has more elements when traversing the list in the reverse direction. (In other words, returns `true` if `https://developer.android.com/reference/java/util/ListIterator#previous()` would return an element rather than throwing an exception.)

<br />

| Returns ||
|---|---|
| `boolean` | `true` if the list iterator has more elements when traversing the list in the reverse direction <br /> |

### next

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract E next ()
```

Returns the next element in the list and advances the cursor position. This method may be called repeatedly to iterate through the list, or intermixed with calls to `https://developer.android.com/reference/java/util/ListIterator#previous()` to go back and forth. (Note that alternating calls to `next` and `previous` will return the same element repeatedly.)

<br />

| Returns ||
|---|---|
| `E` | the next element in the list <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/util/NoSuchElementException` | if the iteration has no next element |

### nextIndex

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract int nextIndex ()
```

Returns the index of the element that would be returned by a subsequent call to `https://developer.android.com/reference/java/util/ListIterator#next()`. (Returns list size if the list iterator is at the end of the list.)

<br />

| Returns ||
|---|---|
| `int` | the index of the element that would be returned by a subsequent call to `next`, or list size if the list iterator is at the end of the list <br /> |

### previous

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract E previous ()
```

Returns the previous element in the list and moves the cursor position backwards. This method may be called repeatedly to iterate through the list backwards, or intermixed with calls to `https://developer.android.com/reference/java/util/ListIterator#next()` to go back and forth. (Note that alternating calls to `next` and `previous` will return the same element repeatedly.)

<br />

| Returns ||
|---|---|
| `E` | the previous element in the list <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/util/NoSuchElementException` | if the iteration has no previous element |

### previousIndex

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract int previousIndex ()
```

Returns the index of the element that would be returned by a subsequent call to `https://developer.android.com/reference/java/util/ListIterator#previous()`. (Returns -1 if the list iterator is at the beginning of the list.)

<br />

| Returns ||
|---|---|
| `int` | the index of the element that would be returned by a subsequent call to `previous`, or -1 if the list iterator is at the beginning of the list <br /> |

### remove

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract void remove ()
```

Removes from the list the last element that was returned by `https://developer.android.com/reference/java/util/ListIterator#next()` or `https://developer.android.com/reference/java/util/ListIterator#previous()` (optional operation). This call can only be made once per call to `next` or `previous`. It can be made only if `https://developer.android.com/reference/java/util/ListIterator#add(E)` has not been called after the last call to `next` or `previous`.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if neither `next` nor `previous` have been called, or `remove` or `add` have been called after the last call to `next` or `previous` |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` | if the `remove` operation is not supported by this list iterator |

### set

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract void set (E e)
```

Replaces the last element returned by `https://developer.android.com/reference/java/util/ListIterator#next()` or `https://developer.android.com/reference/java/util/ListIterator#previous()` with the specified element (optional operation). This call can be made only if neither `https://developer.android.com/reference/java/util/ListIterator#remove()` nor `https://developer.android.com/reference/java/util/ListIterator#add(E)` have been called after the last call to `next` or `previous`.

<br />

| Parameters ||
|---|---|
| `e` | `E`: the element with which to replace the last element returned by `next` or `previous` <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/ClassCastException` | if the class of the specified element prevents it from being added to this list |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if some aspect of the specified element prevents it from being added to this list |
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if neither `next` nor `previous` have been called, or `remove` or `add` have been called after the last call to `next` or `previous` |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` | if the `set` operation is not supported by this list iterator |