ListIterator 以前的方法不起作用
Posted
技术标签:
【中文标题】ListIterator 以前的方法不起作用【英文标题】:ListIterator previous method not working 【发布时间】:2013-10-28 09:56:18 【问题描述】: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)
【问题讨论】:
【参考方案1】:来自文档:
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
【讨论】:
【参考方案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());
【讨论】:
【参考方案3】:ListIterator<String> i=a.listIterator();
最初的迭代器我会指向index of 0
您位于index 0
,因此没有先前的元素。
【讨论】:
【参考方案4】:它将从列表的前面开始,因此在该点之前没有任何内容。如果你想使用这些方法,请使用ListIterator.
Docs.
【讨论】:
【参考方案5】:您允许到达列表的末尾或中间的任何位置以返回。索引 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());
【讨论】:
【参考方案6】:正如其他人所说,你的指针仍然指向 List 中的第一个元素,所以 -1 是不可能的。
大小为 n 的列表将以 1,2 ....n-1 作为索引。
n-1 不是 -1。
这就是 hasPrevious 和 previous 不适合您的原因。
干杯。
【讨论】:
以上是关于ListIterator 以前的方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章
从另一个视图重新绑定剑道网格到以前的搜索条件的正确方法是啥(后退按钮不起作用)