缘由
遍历ArrayList 集合时筛选删除某一项之后发生元素的缺失即元素下标的前移。
通过比较迭代器的方法发现了该错误:
for(int i=0;i<arrayList.size();i++) {
if(arrayList.get(i).length() > 5) {
arrayList.remove(i);
}
}
解决方案
1、倒序遍历
for(int i=arrayList.size()-1;i>=0;i--) {
if(arrayList.get(i).length() > 5) {
arrayList.remove(i);
}
}
2、多线程修改
//拷贝并重写回集合
CopyOnWriteArrayList<E> list = new CopyOnWriteArrayList<E>(arrayList);
for(String str:list){
if(str.length() > 5)
list.remove(str);
}
3、迭代器
Iterator<String> iterator = arrayList.iterator();
while(iterator.hasNext()){
if(iterator.next().length() > 5){
iterator.remove();
}
}