Iterator.remove()IllegalStateException

Del*_*ino 7 java iterator illegalstateexception

在下面的代码中,我有一个try catch块,尝试使用Iterator从Vector中删除元素.我创建了自己的QueueExtendingVect扩展Vector和实现的类Iterator.

该变量qev1是类的实例QueueExtendingVect.我已经为这个Vector添加了一些元素.

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));
   }
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我向Vector qev1添加了一些元素.其他变量在代码的其他部分.

但是,当我运行我的程序时,我在运行时得到一个IllegalStateException.我不确定这意味着什么.

rge*_*man 27

你没有打电话next()给你Iterator,所以它还没有提到第一个项目.您无法删除尚未指定的项目.

先呼叫next()前进到第一个项目,然后再打电话remove().

  • 这也发生在我身上.但原因不一样,我在两次或多次调用`it.remove()`,这将导致IllegaStateException. (6认同)
  • @mynorka你用这个调用创建一个新的迭代器.问题就在于此.这个答案是对的. (3认同)