今天开发过程中,使用增强for循环遍历集合,然后往集合中添加元素时,报异常错误 ConcurrentModificationException,本文结合实际代码来分析原因兵给出解决方案
1.报错的代码
if(fileList.size() > 0){
for(UserFile userFile : fileList){
if(Constants.IS_DIR_YES == userFile.getIsDir()){//如果是文件夹,递归查找子文件,然后放入返回的结果list中
childFileList = getChildFile(userFile.getId());
if(childFileList.size() > 0){
for(UserFile childUserFile : childFileList){
//给子文件赋予上一级的文件夹路径
childUserFile.setFilePath("/" + userFile.getFileName() + childUserFile.getFilePath());
fileList.add(childUserFile);
}
}
}
}
}
2.修改后的正确代码
if(fileList.size() > 0){
for (int i = 0; i < fileList.size(); i++) {
if(Constants.IS_DIR_YES == fileList.get(i).getIsDir()){//如果是文件夹,递归查找子文件,然后放入返回的结果list中
childFileList = getChildFile(fileList.get(i).getId());
if(childFileList.size() > 0){
for (int j = 0; j < childFileList.size(); j++) {
//给子文件赋予上一级的文件夹路径
childFileList.get(j).setFilePath("/" + fileList.get(i).getFileName() + childFileList.get(j).getFilePath());
fileList.add(childFileList.get(j));
}
}
}
}
}
3.原因:使用增强for循环时,对fileList集合调用了fileList.add(childUserFile);方法往集合中添加新元素,迭代器写法会出现这种异常问题,而增强for循环本身是用来替代迭代器的,集合的中新添加了元素,而迭代器却不知道,所以也会报这样的错误信息。实际上,增加for循环或迭代器遍历元素的时候,是不能通过集合修改元素的,改成普通for循环就行了