2013-10-28 14 views
3
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()和以前的(),它顯示一條消息,如下::的ListIterator以前的方法不起作用

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

回答

0

它將從列表的前面開始,因此在此之前沒有任何事情發生。如果要使用這些方法,請使用ListIterator.

Docs

11

從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
ListIterator<String> i=a.listIterator(); 

最初迭代器I將指向index of 0

您是在index 0所以沒有一個元素。

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()); 
     } 
1

因爲您得到了列表中的默認ListIterator,它的第一要素,這就是爲什麼hasPrevious()回報falsewhile退出循環開始。如果您想以相反順序遍歷列表,請從上一個索引獲取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()); 
}