总结教训-删除的微妙变化

       今天调试程序,发现一个bug。如一个Vector db存储着已经访问的URL作为URL库(每个URL唯一),另一个Vector newUrl保存新搜索到的URL(假设这个向量中不会有相同的URL),当newUrl达到一定大小,对其进行检测删除已经存在的URL,开始的实现方法是:

for(int i=0; i<newUrl.size(); i++)
{
     if(db.contains(newUrl.get(i))
           newUrl.remove(i);
}

        这样对了吗?我开始就是这么写的,结果大错特错。当在向量中删除一个元素后,索引在其后的元素索引都变了,这样将来再要删除一个元素时,按照i索引所删除的并不是自己想要的(而是索引更靠后的)。
        解决方法有二:从索引号最大的开始往小的查找删除;按内容删除(注意不要删除不在db中,且是第一次被发现的那个)。下面是第一种解决方法:


for(int i=newUrl.size()-1; i--)
{
     if(db.contains(newUrl.get(i))
           newUrl.remove(i);
}

        其实这个bug很微妙,主要是开始编写的时候没有认真考虑,导致后来花了很多时间才找到它。越是简单的东西,还是应该花些心思在上面的,不然受害更深。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值