您能否解释Iterator结果的行为:

    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() );
    }


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

0 1 2 3元素索引

a b c d元素值

最佳答案

请参阅Javadoc中的ListIterator


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


ListIterator.previous()


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


您正在previous()b之间调用c,这将返回前一个元素(b)并将光标移回一个位置(在ab之间),因此现在nextIndex()返回1

关于java - Java迭代器nextIndex指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38295626/

10-11 13:57