ListIterator以前的方法不起作用

时间:2013-10-28 09:56:18

标签: java iterator listiterator

package wrap;
import java.util.*;
public class ArrayListDemo {

    public static void main(String [] args){
        ArrayList<String> a=new ArrayList<String>();
        a.add("B");
        a.add("C");
        a.add("D");
        ListIterator<String> i=a.listIterator();
        while(i.hasPrevious()){
            System.out.println(i.previous());
        }
    }

}

该程序适用于hasNext()和next()方法,但对于hasPrevious()和previous(),它显示如下消息::

<terminated> ArrayListDemo [Java Application] C:\Program Files (x86)\Java\jre7\bin\javaw.exe (28-Oct-2013 3:20:35 PM)

6 个答案:

答案 0 :(得分:16)

来自doc:

public ListIterator<E> listIterator()
  

返回此列表中元素的列表迭代器(正确   序列)。

boolean hasPrevious()
  

如果此列表迭代器在遍历时具有更多元素,则返回true   反向列表。

因为迭代器位于第一个位置,hasPrevious()将返回false,因此不会执行while循环。

 a's elements

    "B"  "C"  "D"
     ^
     |

Iterator is in first position so there is no previous element

如果你这样做:

    ListIterator<String> i=a.listIterator(); <- in first position
    i.next(); <- move the iterator to the second position
    while(i.hasPrevious()){
        System.out.println(i.previous());
    }

它将打印"B",因为您处于以下情况:

<小时/>      a的元素

        "B"  "C"  "D"
              ^
              |
    Iterator is in second position so the previous element is "B"

您也可以使用方法listIterator(int index)。它允许您将迭代器放在index

定义的位置

如果你这样做:

ListIterator<String> i=a.listIterator(a.size());

会打印

D
C
B

答案 1 :(得分:2)

由于您获得了列表的默认ListIterator,因此它从第一个元素开始,这就是hasPrevious()返回false并退出while循环的原因。如果要以相反的顺序遍历列表,请从最后一个索引获取ListIterator,然后使用hasPrevious()previous()方法向后遍历。

ListIterator<String> i = a.listIterator(a.size()); // Get the list iterator from the last index
while (i.hasPrevious()) {
    System.out.println(i.previous());
}

答案 2 :(得分:1)

ListIterator<String> i=a.listIterator();

最初迭代器我会指向index of 0

你在index 0所以没有以前的元素。

答案 3 :(得分:0)

它将从列表的前面开始,因此在该点之前没有任何内容。如果您想使用这些方法,请使用ListIterator.

Docs

答案 4 :(得分:0)

你指望到达列表的末尾或两者之间的任何地方来追溯。索引0处没有元素的先前元素。

例如

System.out.println("Elements in forward directiton");
        while(i.hasNext()){
            System.out.println(i.next());
        }
System.out.println("Elements in backward directiton");
        while(i.hasPrevious()){
            System.out.println(i.previous());
        }

答案 5 :(得分:0)

正如其他人所说,您的指针仍然指向List中的第一个元素,因此不可能-1。

大小为n的列表将以1,2 .... n-1作为索引。

n-1不是-1。

这就是hasPrevious和previous对您不起作用的原因。

干杯。