7
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)
4

6 回答 6

18

从文档:

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
于 2013-10-28T09:57:34.217 回答
3

Since you get the default ListIterator for the list, it starts with the first element, which is why hasPrevious() returns false and the while loop is exited. If you want to traverse the list in the reverse order, get the ListIterator from the last index and traverse backwards using the hasPrevious() and previous() methods.

ListIterator<String> i = a.listIterator(a.size()); // Get the list iterator from the last index
while (i.hasPrevious()) {
    System.out.println(i.previous());
}
于 2013-10-28T10:01:00.713 回答
2
ListIterator<String> i=a.listIterator();

最初我将指向的迭代器index of 0

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

于 2013-10-28T09:58:27.887 回答
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());
        }
于 2013-10-28T09:59:15.397 回答
0

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

文档

于 2013-10-28T09:57:33.447 回答
0

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

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

n-1 不是-1。

这就是 hasPrevious 和 previous 不适合您的原因。

干杯。

于 2019-09-23T11:44:39.460 回答