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