关于集合中元素的删除

关于集合中的remove
- 当集合的结构发生改变时,迭代器必须重新获取,如果还用以前的迭代器,会出现异常:java.util.ConcurrentModificationException
- 在迭代集合元素的过程中,不能调用集合对象的remove方法,c1.remove()去删除元素

Iterator it=c.iterator();
获取的迭代器对象,迭代器是用来遍历集合,此时相当于对当前集合的状态拍了一个快照
迭代器迭代对象的时候会参照这个快照进行迭代

package Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
关于集合中的remove:
     当集合的结构发生改变时,迭代器必须重新获取,如果还用以前的迭代器,会出现异常:java.util.ConcurrentModificationException

     在迭代集合元素的过程中,不能调用集合对象的remove方法,c1.remove()去删除元素
 */


/*
 Iterator it=c.iterator();
 获取的迭代器对象,迭代器是用来遍历集合,此时相当于对当前集合的状态拍了一个快照
 迭代器迭代对象的时候会参照这个快照进行迭代
 */
public class Collectionremove {
    public static void main(String[] args) {
        //创建集合
        Collection c=new ArrayList();
        /*
        注意:此时获取的迭代器,指向的是集合中没有元素状态下的迭代器。
        集合结构只要发生改变,迭代器必须重新获取!!!!!
        当集合结构发生了改变,迭代器没有重新获取的时候,调用next方法时,java.util.ConcurrentModificationException
         */
       // Iterator it=c.iterator();
        //添加元素
        c.add(4);  //Integer类型
        c.add(5);
        c.add(6);
        //获取迭代器
        Iterator it=c.iterator();
        while(it.hasNext()){
            //写代码时,next方法返回值类型必须是Object,不能这样写Integer i=it.next();
            Object o=it.next();
            System.out.println(o);
        }

        Collection c1=new ArrayList();
        c1.add("avf");
        c1.add("ert");
        c1.add("exo");
        Iterator it2=c1.iterator();
        while(it2.hasNext()){
            Object o1=it2.next();
            //删除元素
            //删除元素后,集合结构发生了变化,应该重新获取迭代器
            //但是,循环下一次的时候并没有重新获取迭代器,所以会出现异常java.util.ConcurrentModificationException
            //出异常的根本原因:集合中元素删除了,但是没有通知迭代器(迭代器不知道集合变化了)
            //   c1.remove(o1); 直接通过集合去删除元素,并没有通知迭代器,导致迭代器的快照和原集合状态不同

            //使用迭代器来删除元素
            //迭代器去删除的时候,会自动更新迭代器,并且更新集合(删除集合中的元素)
            it2.remove(); //删除的一定是迭代器指向的当前元素
            System.out.println(o1);
        }
        System.out.println(c1.size());//0
    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小心!!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值