ListIterator previous method not working
Solution 1
From the doc :
public ListIterator<E> listIterator()
Returns a list iterator over the elements in this list (in proper sequence).
and
boolean hasPrevious()
Returns true if this list iterator has more elements when traversing the list in the reverse direction.
Because the iterator is in the first position, hasPrevious()
will return false and hence the while loop is not executed.
a's elements
"B" "C" "D"
^
|
Iterator is in first position so there is no previous element
If you do :
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());
}
It will print "B"
because you're in the following situation :
a's elements
"B" "C" "D"
^
|
Iterator is in second position so the previous element is "B"
You could also use the method listIterator(int index)
. It allows you to place the iterator at the position defined by index
.
If you do :
ListIterator<String> i=a.listIterator(a.size());
It will print
D
C
B
Solution 2
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());
}
Solution 3
ListIterator<String> i=a.listIterator();
initially iterator i will point to index of 0
You are at index 0
so there is no previous element.
tcp
Updated on June 13, 2022Comments
-
tcp almost 2 years
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()); } } }
The program works fine for hasNext() and next() methods but for hasPrevious() and previous() it displays a message as below::
<terminated> ArrayListDemo [Java Application] C:\Program Files (x86)\Java\jre7\bin\javaw.exe (28-Oct-2013 3:20:35 PM)