Iterator.next()上的ConcurrentModificationException,但只有一个相同的代码

时间:2016-07-22 02:58:35

标签: java arraylist concurrency hashmap next

所以我正在研究一个简单的Java代码

我有这个:

HashMap<ObjectKey,ArrayList<DifferentObject>> HP;

所以我按照我想要的方式使用了它,它是第一个代码:

FillHashMap(HP);
for(ObjectKey k:HP.keySet()){
    ArrayList<DifferentObject> temp=HP.get(k);
    for(Iterator<DifferentObject> it=temp.iterator(); it.hasNext();){
        if(it.hasNext()){
            DifferentObject OB=iterator.next();
            if(OB.Data<OtherData && OB.Time<CurrentTime){
                it.remove();
            }
        }
    }
}

它就像一个魅力,所以我出去清理我的代码有点让它更具代表性,现在它看起来像这样:

FillHashMap(HP);
for(Object k:HP.keySet()){
  for(Iterator<DifferentObject> it=HP.get(k).iterator();it.hasNext();){
      DifferentObject OB=it.next(); (*)
      if(Condition(OB)){
           it.remove();
      }
}      
}

然后我在(*)行上得到ConcurrentModificationException 改变HP的另一种方法是FillHashMap,它到达for-each循环时它已经结束了,它真的是相同的代码吗?

那为什么现在给我错误?

任何远程帮助或建议都会被贬低。谢谢。

编辑:所以我回到了FillHashMap方法:

FillHashMap(HashMap HP){
   Differentobject x=new DifferentObject(); 
   for(iterator over hashmap){
       ArrayList<Different Object> temp= HP.get(k);
       temp.SetSomething(int a);
       temp.add(x)
   }

}

如果我对temp.add发表评论错误消失了,那么该程序就不会再做什么了,但至少现在我现在已经去了。

当2位代码的循环执行时,FillHashMap应该结束,但我猜不是。

0 个答案:

没有答案