2019年9月12日更新
评论中提到的从后往前删除的方法对于本文中是可行的,当时写的时候没考虑到。
今天有一个需求是需要将查询结果list进行遍历,找出其中isActived(是否有效字段)为无效的放在list的最后面。
大意之下写下以下错误代码:
for(int i=0;i<serviceList.size();i++){
String isActived = serviceList.get(i).getIsActived();
if("无效".equals(isActived)){
Service s = serviceList.get(i);
serviceList.remove(i);
serviceList.add(s);
}
}
正确代码如下:
List<Service> newList = new ArrayList<Service>();
for(int i=0;i<serviceList.size();i++){
String isActived = serviceList.get(i).getIsActived();
if("无效".equals(isActived)){
Service s = serviceList.get(i);
newList.add(s);
}
}
for(int i=0;i<newList.size();i++){
serviceList.remove(newList.get(i));
}
serviceList.addAll(newList);
总结:list在执行remove方法后会删除某个元素,然后之后的每一个元素都会向前移动一个下标,所以在循环中不能使用remove方法!