今天在For循环中用List 的remove() 方法时出现了一个很奇怪的问题,一个本应该被remove的值却还在List中。
查了下
remove()方法是根据给的下标索引去删除一个元素,所以每次remove掉一个元素之后list的总长度就会减去1,并且List后面的元素会自动的去覆盖前一个被删除元素。
以下面的代码为例:
for(int i = 0;i < list.size();i++){
if(list.get(i) < 100){
list.remove(i);
}
}
如果 list中的第一个值是小于100的 那么原来的list中的第二个值会自动的去覆盖原list中的第一个值,后面的索引同理,总长度减去1。
这时For循环的 i 已经自增到了1 在For循环中第二次判断的实际上是原list中的第三个值 这样原list中的第二个值就成为了被跳过的值
解决方法:建议循环遍历List有使用remove()方法的时候倒序遍历
比如
for(int i = list.size() - 1;i >= 0;i--){
if(list.get(i) < 100){
list.remove(i);
}
}