iterator.remove().
是好的,但是我的问题:如果我想要一边迭代,为某种条件,从数组List删除另一个对象。在java中迭代时删除!但删除其他然后当前对象
实施例(人是所述数组列表)
for (Iterator i = al.iterator(); i.hasNext();){
IEvent event =(IEvent) i.next();
if (nbSendingWTS > 0 || nbSendingCTS > 0){
i.remove();
al.remove(swtsee);
al.remove(sdctsee);
System.out.println("dropping evtg");
}
这是给我一个错误:异常在线程 “主” java.util.ConcurrentModificationException
而且正常迭代:
for(IEVEnt event:al){}
给出错误
要更清楚地看到swtsee广告sdctsee是从先前迭代列表中取出并保存的,所以如果我有新条件,我可以删除它。那么当我检测到它们将它们转移到更高的索引然后使用反向迭代时,有没有办法?
怎么办?
如果你真的需要做到这一点,可以考虑'ArrayBlockingQueue','ConcurrentLinkedQueue'或其他专为并发使用而设计的集合。他们的迭代器保证不会抛出这个异常。但是,除非你真的使用多线程,否则它们可能是过火的。 – 2011-03-18 04:53:23