java list的remove方法问题

使用list集合存储数据的时候,明明感觉用remove方法删除其中一个对象没有问题,但是后台却报错,如何解决这个问题呢?

删除时,可以直接删除这个对象,则不会报错,加入List<User> list;

则删除时list.remove(user);

若使用如下方式则容易出问题

for (int i = 0; i < list.size(); i++) {

list.remove(i);

// i--;

//System.out.println(i+" "+list.get(i)+" ");

}

运行结果如下:

报错原因如下: List每remove掉一个元素以后,后面的元素都会向前移动 ,此时如果执行i++,则刚刚移过来的元素没有被读取

所以直接删除这个对象,即使元素位置移动,但是我们删除时是直接取的对象,所以不会报错,注意:直接删除对象,会把所有符合删除条件的对象全都删除。

解决方法请接着往下看:

解决方法:

1、每移动一次后,再把i移动回来

2、删除时,从后往下删,先删除后面的元素

3、iterator删除(此方法有待进一步验证)

以下两种示例均为正确写法(运用的原理就是直接删除对象的思路)

上述方法取值删除时,最终取的是对象的值,这样可以解决该报错问题。

list的remove()报错后的解决思路:使用remove()的方法时,要先从大到小的位置移除。当然如果你知道具体的对象,直接移除remove(对象)更稳妥。

总结

1、使用remove()的方法时,要先从大到小的位置移除。当然如果你知道具体的对象,直接移除remove(对象)更稳妥。(注意,根据我的经验,这种移除对象方法,有bug,改用了iterator)

2、要密切注意自己调用的remove()方法中的,传入的是int类型还是一个对象,直接删除对象时,前提是list中存储的是对象数据,此时删除需额外注意。

原文:百度安全验证

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值