Posted on 2005年6月20日 13:06
在Map或者Collection的時(shí)候,不要用它們的API直接修改集合的內(nèi)容,如果要修改可以用Iterator的remove()方法,例如:
??? public void setReparation( Reparation reparation ) {
??????? for (Iterator it = this.reparations.iterator();it.hasNext();){????//reparations為Collection
??????????? Reparation repa = (Reparation)it.next();
??????????? if (repa.getId() == reparation.getId()){
??????????????? this.reparations.remove(repa);
????????????????this.reparations.add(reparation);
??????????? }
??????? }
?? }
如上寫(xiě)會(huì)在運(yùn)行期報(bào)ConcurrentModificationException,可以如下修改:
??? public void setReparation( Reparation reparation ) {
??????? boolean flag = false;
??????? for (Iterator it = this.reparations.iterator();it.hasNext();){????//reparations為Collection
??????????? Reparation repa = (Reparation)it.next();
??????????? if (repa.getId() == reparation.getId()){
??????????????? it.remove();
??????????????? flag = true;
??????????????? break;
??????????? }
??????? }
??????? if(flag){
????????? this.reparations.add(reparation);
??????? }
??? }
具體可以參考:http://gceclub.sun.com.cn/yuanchuang/week-14/iterator.html