首先来看一段for循环list.remove代码。
int pos = 0;
for (String line : lineList) {
String[] info = line.trim().split(":");
if (info.length == 2) {
pos = lineList.indexOf(line);
lineList.remove(line);
}
}
上面的代码一眼看上去,写的挺顺手,其实这种方式存在问题,删除元素后继续循环,由于元素使用时发生并发修改,会抛出异常报错误信息ConcurrentModificationException。但删除break跳出,则不会触发报错。
修改方式:
- 置空list元素
lineList.set(pos, "");
- iterator遍历
Iterator<String> it = lineList.iterator();
while(it.hasNext()){
String line = it.next();
String[] info = line.trim().split(":");
if (info.length == 2) {
it.remove();
}
}
- 倒序遍历删除
for(int i=lineList.size()-1;i>=0;i--){
String[] info = lineList.get(i).trim().split(":");
if (info.length == 2) {
lineList.remove(i);
}
}