异常:java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.mediwit.illcase.service.impl.CaseIdService.getTreatCompanyList(CaseIdService.java:1237)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
....
原因:出现该异常的原因大多数情况下是在遍历集合的时候,执行了对集合元素的删除,如下所示:
public void test() {
try {
ArrayList<String> list = new ArrayList<String>();
list.add("company1");
list.add("company2");
list.add("company3");
list.add("company4");
for (String string : list) {
if(string.equals("company1")) {
list.remove(string);
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
而集合元素在进行更改的时候会触发一个 checkForComodification() 方法,方法中有这么一段代码:
if(modCount != exceptedModCount)
throw new ConcurrentModificationException();
}
调用list.remove()后导致了modCount!=exceptiedModCount,所有就抛异常了;
解决:
使用迭代器遍历,调用迭代器的删除方法:如下所示
Iterator<String> it = list.iterator();
while(it.hasNext()) {
String curStr = it.next();
if("company1".equals(curStr)){
it.remove();
}