java ListIterator不返回预期的项目

时间:2017-01-06 14:35:39

标签: java listiterator

我有以下代码显示ListIterator如何工作,但看起来迭代器返回的项目不是我所期望的。

import java.util.*;
public class IteratorExample {

 public static void main(String args[]) {

  ArrayList al = new ArrayList();

  al.add("A");
  al.add("B");
  al.add("C");

  ListIterator litr = al.listIterator();

  System.out.print(litr.next());  // expect A
  System.out.print(litr.next());  // expect B
  System.out.print(litr.next());  // expect C
  System.out.print(litr.previous());  // expect B
  System.out.print(litr.previous());  // expect A
  System.out.print(litr.next());      // expect B
  System.out.print(litr.previous());  // expect A
}}

我希望看到“ABCBABA”,但示例程序给了我“ABCCBBB”。谁能解释迭代器是如何工作的?如果我想通过使用迭代器得到结果“ABCBABA”,我该怎么办?

3 个答案:

答案 0 :(得分:2)

  

ListIterator没有最新信息   元件;它的光标位置总是位于元素之间   将通过调用previous()和将要返回的元素返回   通过调用next()返回。长度为n的列表的迭代器   具有n + 1个可能的光标位置,如插入符号(^)所示   下面:

              Element(0)   Element(1)   Element(2)   ... Element(n-1)
positions:  ^            ^            ^            ^                  ^

ListIterator documentation

答案 1 :(得分:2)

这是了解此行为的另一种简单方法。

next() - >返回下一个元素并将光标前进一个元素,以便现在光标指向下一个元素的旁边。

previous() - >返回前一个元素并将光标向后移动一个元素,以便光标指向前一个元素。

在创建列表之后,迭代器位置如下所示:

{{1}}

所以输出正确“ABCCBBB”

答案 2 :(得分:1)

如果您阅读了listIterator.previous()方法的java doc,那么下面提到的内容可以回答您的问题:

“返回列表中的前一个元素。可以重复调用此方法以向后遍历列表,或者与来回调用混合使用。(请注意,交替调用next和previous will重复返回相同的元素。)“