注意list集合remove(index)方法的用法

来源:互联网 发布:linux线程池 编辑:程序博客网 时间:2024/05/29 03:02

    相信大家都非常的熟悉list集合,不管是在算法还是实际项目中,我们都会经常用到它。既然那么常用,那么我对它的一些常用方法真的都掌握了吗?

    之前我在做项目的过程中,就掉进了list集合中remove(index)这个方法的坑里了。需求是这样的:后台我就是用list集合来封装数据,然后通过responsebody转化为json数据返回给前端,在返回数据之前,我需要根据用户的IP来剔除一些数据,因为有些数据有些用户是不能看的,因此我就用了list集合中的remove(index)方法,但是我发现,如果用for循环来剔除的话,结果还是不能完全剔除,为什么会这样呢?

    后来我重新查了一下API,该方法原来是这样的:


    可以看出,原来当执行完remove(index)该方法的时候后续的所有的元素都会向左移动,这就是我问题的所在 了。比如一下代码:

for(int i=0;i<list.size();i++){     if(该用户不能看)        list.remove(i);}
    当我用上面的代码的时候,就会出现问题,比如A:index=1和B:index=2的数据都是我想剔除的,那么当执行完remove(1)的时候,这时已经删除了A数据,同时后续所有元素就会向左移动,而此时i已经等于2了,但我想删除的B数据已经向左移动到了index=1;所以B数据无法删除。经过我这样分析,解决该问题,只需要再添加一句代码就可以了。

for(int i=0;i<list.size();i++){     if(该用户不能看){        list.remove(i);         i--;    }}
    加了i--之后,它就会又重新从index=1的位置开始检查了,因此解决上面的问题。这些都是一些比较细节的东西,稍微不注意的话,都会掉进陷阱里无法自拔。

    所以说为什么有些程序健壮性不够强大,就是工程师忽略了一些比较细节的东西,细节决定成败,养成良好的习惯很重要!




原创粉丝点击