2013-10-28 3 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() и следующий() методов, но для 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

Из дока:

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

первоначально итератор я укажу 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() возвращает 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()); 
} 
Смежные вопросы