Java 迭代器 nextIndex 指针

psw*_*rdf 0 java collections

你能解释一下迭代器结果的行为吗:

    ArrayList< String > list = new ArrayList< >(
            Arrays.asList( new String[] { "a", "b", "c", "d" } ) );
    int i = 0;
    ListIterator< String > iterator = list.listIterator();
    while( iterator.hasNext() ) {
        if( ++i == 3 ) {
            System.out.println(
                    iterator.previous() + iterator.nextIndex() );
        }
        System.out.println( iterator.next() + iterator.nextIndex() );
    }
Run Code Online (Sandbox Code Playgroud)

输出是:a1 b2 b1 b2 c3 d4 为什么第三个输出是“b1”而不是“a1”?我想结构

0 1 2 3 元素索引

abcd 元素值

shm*_*sel 5

请参阅 Javadoc 以了解ListIterator:

AListIterator没有当前元素;它的光标位置始终位于调用previous()将返回的元素和调用 将返回的元素之间next()。

并且ListIterator.previous():

返回列表中的前一个元素并将光标位置向后移动... (请注意,交替调用next和previous将重复返回相同的元素。)

您正在调用previous()between band c,它返回前一个元素 ( b) 并将光标设置回一个位置(在aand之间b),因此nextIndex()现在返回1.