# Java `ListIterator`接口

> 原文： [https://howtodoinjava.com/java/collections/java-listiterator/](https://howtodoinjava.com/java/collections/java-listiterator/)

Java `ListIterator`接口是**双向迭代器**，用于在*向前*或*向后*的任一方向上对[列表](https://howtodoinjava.com/java-arraylist/)的元素进行迭代。 

我们可以使用`list.listIterator()`方法调用来获取任何给定列表的列表迭代器的引用。 遵循给定的`ListIterator`语法。

```java
ListIterator<T> listIterator = list.listIterator();

```

## 1\. Java `ListIterator`特性

以下是 Java 中`ListIterator`提供的特性列表。

1.  从 Java 1.2 开始，可以使用`ListIterator`。
2.  `ListIterator`扩展了`Iterator`接口。
3.  `ListIterator`仅适用于`List`实现的类。
4.  与`Iterator`不同，`ListIterator`支持在元素列表上的所有 CRUD 操作（创建，读取，更新和删除啊）。
5.  与`Iterator`不同，`ListIterator`是**双向**。 它支持正向和反向迭代。
6.  它没有当前元素； 它的光标位置始终位于通过调用`previous()`返回的元素和通过调用`next()`返回的元素之间。

## 2\. Java `ListIterator`示例

让我们从一个简单的`ListIterator` Java 示例开始，遍历`ArrayList`的元素。 请注意，数组索引以`'0'`开头。

```java
ArrayList<String> list = new ArrayList<>();

list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");

ListIterator<String> listIterator = list.listIterator();

System.out.println("Forward iteration");

//Forward iterator
while(listIterator.hasNext()) {
    System.out.print(listIterator.next() + ",");
}

System.out.println("Backward iteration");

//Backward iterator
while(listIterator.hasPrevious()) {
    System.out.print(listIterator.previous() + ",");
}

System.out.println("Iteration from specified position");

//Start iterating from index 2
listIterator = list.listIterator(2);

while(listIterator.hasNext()) {
    System.out.print(listIterator.next() + ",");
}

```

程序输出。

```java
Forward iteration
A,B,C,D,E,F,

Backward iteration
F,E,D,C,B,A,

Iteration from specified position
C,D,E,F,

```

## 3\. Java `ListIterator`方法

1.  **`void add(Object o)`**：将指定的元素插入列表（可选操作）。
2.  **`boolean hasNext()`**：如果在向前遍历列表时此列表迭代器包含更多元素，则返回`true`。
3.  **`boolean hasPrevious()`**：如果在反向遍历列表时此列表迭代器包含更多元素，则返回`true`。
4.  **`Object next()`**：返回列表中的下一个元素并前进光标位置。
5.  **`int nextIndex()`**：返回元素的索引，该元素的索引将由对`next()`的后续调用返回。
6.  **`Object previous()`**：返回列表中的上一个元素，并将光标位置向后移动。
7.  **`int previousIndex()`**：返回元素的索引，该元素的索引将由对`next()`的后续调用返回。
8.  **`void remove()`**：从列表中移除`next()`或`previous()`返回的最后一个元素（可选操作）。
9.  **`void set(Object o)`**：将`next()`或`previous()`返回的最后一个元素替换为指定的元素（可选操作）。

## 4。总结

在本教程中，我们学习了 Java `ListIterator`接口。 我们学习了`ListIterator`方法和简单示例，以向前和向后迭代列表元素。

将我的问题放在评论部分。

学习愉快！

参考文献：

[`ListIterator`接口 Java 文档](https://docs.oracle.com/javase/8/docs/api/java/util/ListIterator.html)