Search code examples
javaiteratorillegalstateexception

Iterator.remove() IllegalStateException


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.


Solution

  • 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().