什么类直接实现ListIterator?

时间:2015-05-12 08:45:52

标签: java

哪个类实际实现了接口ListIterator?我正在研究Collections API ..似乎在ListIterator实现类中返回List的实际方法直接在List本身中指定。

ListIterator接口指定用于操作迭代器的实际方法..但是我找不到实现它的实际类。

实际上是什么类 - 实现 - 允许ListIterator类中的方法工作的接口List

我确定必须有一个实现类,因为调用listIterator()本身肯定无法返回一个接口,必须有一些实例化。

3 个答案:

答案 0 :(得分:2)

使用source luke ...使用源。

来自JDK 8(1.8.0_45)中ArrayList的来源

public ListIterator<E> listIterator() {
    return new ListItr(0);
}

// then line 905
/**
 * An optimized version of AbstractList.ListItr
 */
private class ListItr extends Itr implements ListIterator<E> {
    ListItr(int index) {
        super();
        cursor = index;
    }
// etc

因此ListIterator返回的ArrayList是一个实现接口ListIterator的私有内部类。

答案 1 :(得分:0)

您无法实例化interface,但您始终可以创建“隐身”private class,这令人满意interface,但用户无法直接看到它。例如,LinkedListlistIterator定义为:

public ListIterator<E> listIterator(int index) {
    checkPositionIndex(index);
    return new ListItr(index);
}

private class ListItr implements ListIterator<E> {
    private Node<E> lastReturned;
    private Node<E> next;
    private int nextIndex;
    private int expectedModCount = modCount;

    ListItr(int index) {
        // assert isPositionIndex(index);
        next = (index == size) ? null : node(index);
        nextIndex = index;
    }

    // much more
}

这种行为在lambdas中有它的最终形式,你不会有任何诱惑来查看传递的类的来源。

答案 2 :(得分:-1)

ListIterator添加了迭代列表API的功能。 这是一个用法示例:

List<String> l = new ArrayList<String>(); ListIterator<String> it = l.listIterator(); it.next() ...