# Java 中的`ListIterator`

> 原文： [https://beginnersbook.com/2014/06/listiterator-in-java-with-examples/](https://beginnersbook.com/2014/06/listiterator-in-java-with-examples/)

在上一个教程中，我们讨论了 Java 中的[迭代器](https://beginnersbook.com/2014/06/java-iterator-with-examples/)，我们可以使用它来向前遍历`List`或`Set`。在这里，我们将讨论`ListIterator`，它允许我们在两个方向（向前和向后）遍历列表。

## `ListIterator`示例

在这个例子中，我们在两个方向上遍历[`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist/) 。

```java
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorExample {
  public static void main(String a[]){
    ListIterator<String> litr = null;
    List<String> names = new ArrayList<String>();
    names.add("Shyam");
    names.add("Rajat");
    names.add("Paul");
    names.add("Tom");
    names.add("Kate");
    //Obtaining list iterator
    litr=names.listIterator();

    System.out.println("Traversing the list in forward direction:");
    while(litr.hasNext()){
       System.out.println(litr.next());
    }
    System.out.println("\nTraversing the list in backward direction:");
    while(litr.hasPrevious()){
       System.out.println(litr.previous());
    }
  }
}
```

输出：

```java
Traversing the list in forward direction:
Shyam
Rajat
Paul
Tom
Kate

Traversing the list in backward direction:
Kate
Tom
Paul
Rajat
Shyam
```

注意：我们可以使用`Iterator`遍历`List`和`Set`两者但是使用`ListIterator`我们只能遍历`List`。`Iterator`和`ListIterator`之间还有其他一些差异，我们将在下一篇文章中讨论它们。

### ListIterator 的方法

1）`void add(E e)`：将指定的元素插入列表（可选操作）。

2）`boolean hasNext()`：如果此列表迭代器在向前遍历列表时具有更多元素，则返回`true`。

3）`boolean hasPrevious()`：如果此列表迭代器在反向遍历列表时具有更多元素，则返回`true`。

4）`E next()`：返回列表中的下一个元素并前进光标位置。

5）`int nextIndex()`：返回后续调用`next()`返回的元素的索引。

6）`E previous()`：返回列表中的上一个元素并向后移动光标位置。

7）`int previousIndex()`：返回后续调用`previous()`返回的元素的索引。

8）`void remove()`：从列表中删除`next()`或`previous()`返回的最后一个元素（可选操作）。

9）`void set(E e)`：用指定的元素（可选操作）替换`next()`或`previous()`返回的最后一个元素。

#### 参考：

[`ListIterator` javadoc](https://docs.oracle.com/javase/6/docs/api/java/util/ListIterator.html)