Iterator.remove() IllegalStateException

Delfino picture Delfino · Mar 12, 2014 · Viewed 19k times · Source

In the code below I have a try catch block that attempts to remove an element from a Vector, using Iterator. I've created my own class QueueExtendingVect that extends Vector and implements Iterator.

The variable qev1 is an instance of class QueueExtendingVect. I've already added a few elements to this Vector as well.

try 
{
   qev1.iterator().remove();
}
catch(UnsupportedOperationException e) 
{
   System.out.println("Calling Iterator.remove() and throwing exception.");
}

qev1.enqueue(ci); 
qev2.enqueue(ci);
qcv1.enqueue(ci);
qcv2.enqueue(ci);

for (int i = 1; i < 5; i++)
{
   if (i % 2 == 0)
   {
       qev1.enqueue(new CInteger(i+1));
       qev2.enqueue(new CInteger(i+1));
       qcv1.enqueue(new CInteger(i+1));
       qcv2.enqueue(new CInteger(i+1));
   } 
   else 
  { 
       qev1.enqueue(new Date(i*i));
       qev2.enqueue(new Date(i*i));
       qcv1.enqueue(new Date(i*i));
       qcv2.enqueue(new Date(i*i));
   }
}

In this code I add a few elements to the Vector qev1. The other variables are in other parts of the code.

However, when I run my program I get an IllegalStateException at runtime. I'm not sure what this means.

Answer

rgettman picture rgettman · Mar 12, 2014

You haven't called next() on your Iterator, so it's not referring to the first item yet. You can't remove the item that isn't specified yet.

Call next() to advance to the first item first, then call remove().