java.util.ConcurrentModificationException异常原因及解决方法
在项目中对List进行remove操作时报错java.util.ConcurrentModificationException
代码块:
public static void main(String args[]) {
Long id=Long.valueOf(200);
List<Long> highFfsuserIds=new ArrayList<>();
String ffUids="200";
if (ffUids.contains(",")) {
highFfsuserIds = stringArrToLongArr(ffUids);
}else{
highFfsuserIds.add(Long.valueOf(ffUids));
}
if(highFfsuserIds!=null && highFfsuserIds.size()>0){
for (Long userIds:highFfsuserIds) {
if(userIds.equals(id)){
highFfsuserIds.remove(userIds);
}
}
}
}
上述代码在删除value=200的元素时,报java.util.ConcurrentModificationException异常,如下图经过测试发现,移除List最后一个值时就会报错,看源码是因为数组下标越界造成的,解决方案两种
方案一
不要用foreach循环,用另外一种for循环方式就可以
方案二
用CollectionUtils.disjunction封装方法,直接取出不相同的数据
java.util.ConcurrentModificationException异常完美解决。