program:
public class SortedSet1 {
public static void main(String[] args) {
List ac= new ArrayList();
c.add(ac);
ac.add(0,"hai");
ac.add(1,"hw");
ac.add(2,"ai");
ac.add(3,"hi");
ac.add("hai");
Collections.sort(ac);
Iterator it=ac.iterator();
k=0;
while(it.hasNext()) {
System.out.println(""+ac.get(k));
k++;
}
}
}
output: ai hai hi hw hai
how it execute 5 times?? while come to hai no next element present so condition false. But how it executed.
Your loop above iterates through the list using an index.
it.hasNext()
returns true untilit
reaches the end of the list. Since you don't callit.next()
within your loop to advance the iterator,it.hasNext()
keeps returning true, and your loop rolls on. Until, that is,k
gets to be 5, at which point anIndexOutOfBoundsException
is thrown, which exits the loop.The proper idiom using an iterator would be
or using an index
However since Java5, the preferred way is using the foreach loop (and generics):
the point is ac.get(k) doesn't consume any element of the iterator at the contrary of it.next()
That loop will never terminate. it.hasNext does not advance the iterator. You have to call it.next() to advance it. The loop probably terminates because k becomes 5 at which point the Arraylist with throw a bounds exception.
The correct form of iterating a list (containing strings) is either:
Or if the list is typed, e.g. ArrayList
Or if you absolutely know this is an array list and need speed over terseness: