for循环删除list中的元素应该注意的问题

循环删除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

你可能感兴趣的:(java)