删除List集合中的对象问题

如果List集合存储对象,如Liser>,当需要按需求删除集合对象时,一般会想到的删除方法有,普通for循环,增强for循环,迭代器。

普通for循环:

 @Test
    public void forTest(){
       List<User2> list = new ArrayList<>();
        list.add(new User2(1,"张三1"));
        list.add(new User2(2,"张三2"));
        list.add(new User2(3,"张三3"));
        list.add(new User2(5,"张三4"));
        list.add(new User2(5,"张三5"));
        list.add(new User2(6,"张三6"));
        list.add(new User2(7,"张三7"));
        for (int i = 0; i < list.size(); i++) {
            User2 user = list.get(i);
            if(list.get(i).getId() == 5){
                list.remove(user);
            }
        }
        System.out.println(list);
    }

执行结果

[User2{id=1, name='张三1'}, User2{id=2, name='张三2'}, User2{id=3, name='张三3'}, User2{id=5, name='张三5'}, User2{id=6, name='张三6'}, User2{id=7, name='张三7'}]
 

只能删除一个id=5的数据,为什么?

因为在list删除数据后,list后面数据的下标会自动前移,而i遍历又是继续下个开始,会漏遍历相邻的数据。

增强for循环

@Test
    public void forTest(){
        List<User2> list = new ArrayList<>();
        list.add(new User2(1,"张三1"));
        list.add(new User2(2,"张三2"));
        list.add(new User2(3,"张三3"));
        list.add(new User2(5,"张三4"));
        list.add(new User2(5,"张三5"));
        list.add(new User2(6,"张三6"));
        list.add(new User2(7,"张三7"));
        for (User2 user : list) {
            if(user.getId() == 5){
                list.remove(user);
            }
        }
         System.out.println(list);
    }

 报出异常:java.util.ConcurrentModificationException,关于这个异常的原因,看了很多文章,基本上解释如下:ArrayList的父类AbstarctList中有一个域modCount,每次对集合进行修改(增添、删除元素)时modCount都会+1。

迭代器

 @Test
    public void forTest(){
        List<User2> list = new ArrayList<>();
        list.add(new User2(1,"张三1"));
        list.add(new User2(2,"张三2"));
        list.add(new User2(3,"张三3"));
        list.add(new User2(5,"张三4"));
        list.add(new User2(5,"张三5"));
        list.add(new User2(6,"张三6"));
        list.add(new User2(7,"张三7"));
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            User2 user2 = (User2) iterator.next();
            if(user2.getId() == 5){
                iterator.remove();
            }
        }
        System.out.println(list);
    }

删除是成功的,推荐使用迭代器删除

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JagTom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值