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)
答案 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"
,因为您处于以下情况:
"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.
答案 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对您不起作用的原因。
干杯。