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

转载于:https://my.oschina.net/ChiLin/blog/543444

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值