循环删除list中的元素,我们常常这么做,但有时没有意识到一些问题,看似简单和基础,但一不小心有会导致BUG.
看看代码:
/**
* 循环删除items中的条目
*/
for(int i=0;i<items.size();i++)
{
// if(items.get(i).isSelected() == true)
// {
// items.remove(items.get(i));
// }
items.remove(items.get(i));
}
Log.e("TEST FOR","剩余条目数:"+items.size());
上面代码应该是想删除全部的元素(或删除某些符合要求的元素),但是log打印的剩余元素个数是1,也就是说并不能真正删除全部.原因就是在list中,每删除一个元素后,它的后一个元素就会往前移动,但是for循环中的i还是指向这个元素原来的下标.解决这个问题,只需要将每次删除后i往前移动一位就行了.
修改后的代码:
/**
* 循环删除items中的条目
*/
for(int i=0;i<items.size();i++)
{
// if(items.get(i).isSelected() == true)
// {
// items.remove(items.get(i));
// }
items.remove(items.get(i));
i--;
}
Log.e("TEST FOR","剩余条目数:"+items.size());
最后,这是基础,但越基础越容易忽略,不细心的话很容易酿成BUG