你真的明白关于迭代器的方法、使用异常、并发修改异常介绍嘛?

简介: 关于迭代器的方法、使用异常、并发修改异常介绍的使用

一、什么是迭代器?

          * JDK中提供了一个"Iterator接口",称为迭代器,可以"实现单列集合元素的遍历"

          * Collection接口中提供了iterator()方法,可以获取迭代器对象

//只能是单列集合使用,Map里面的双列集合是不可以的      

二、迭代器的方法

        * public boolean hasNext() : 判断是否存在下一个元素
        
        * public E next() :   获取下一个元素        (next()方法"获取元素",并且"指针移动"到下一个位置)
        
        * public void remove() : 删除元素
        
------------------------------------------------------------------------------------------------------------
            
            
//    迭代器使用步骤 :  (所有的单列集合都可以使用,因为迭代器是在Collection基础下的)

     1. 获取迭代器的对象                集合.iterator();
     2. 循环中,判断是否有元素可以获取     hasNext();
     3. 进入循环,调用next去获取元素      next();


代码演示:

        HashSet<String> set=new HashSet<>();


        set.add("张三");
        set.add("李四");
        set.add("王五");
        set.add("张三");


        //获取迭代器的对象
        Iterator<String> itr = set.iterator();


        //hasNext():判断集合是否存在下一个元素,有返回true
        while (itr.hasNext()){

            String name = itr.next();            //获取集合的对象
            System.out.println(name);

        }

在这里插入图片描述


三、使用迭代器常见的异常

1、NoSuchElementException异常1

   HashSet<String> set=new HashSet<>();


        set.add("张三");
        set.add("李四");
        set.add("王五");
        set.add("张三");


        //获取迭代器的对象
        Iterator<String> itr = set.iterator();


        //获取集合的对象
        System.out.println(itr.next());
        System.out.println(itr.next());
        System.out.println(itr.next());

        System.out.println(itr.next());  
//NoSuchElementException ,如果超过集合的长度取的话就会报没有这个数据的异常


//解决办法: 使用hasNext()判断取元素

在这里插入图片描述


2、NoSuchElementException异常2

        HashSet<String> set = new HashSet<>();


        set.add("张三");
        set.add("李四");
        set.add("王五");
        set.add("张三");


        //获取迭代器的对象
        Iterator<String> itr = set.iterator();


        //hasNext():判断集合是否存在下一个元素,有返回true
        while (itr.hasNext()) {
        
        //不要在一次循环中,多次调用next方法
        //这里代表的是一次循环获取两个数据,如果是偶数的话就没有问题,如果是奇数的话就会报异常,获取不到,不建议
            System.out.println(itr.next());
            System.out.println(itr.next());

     }  

在这里插入图片描述


3、NoSuchElementException异常3

        HashSet<String> set = new HashSet<>();

        set.add("张三");
        set.add("李四");
        set.add("王五");
        set.add("张三");


        //获取迭代器的对象
        Iterator<String> itr = set.iterator();


        while (itr.hasNext()) {

            System.out.println(itr.next());

        }

   

// 使用迭代器时候,数据不能重复使用
        System.out.println(itr.next());

 //NoSuchElementException ,因为这个迭代器里面的数据已经用完了,
//不能再使用这个迭代器获取数据,想使用的话要用新的迭代器

-----------------------------------------------------------------------------------------------------------
    
//解决办法 : 再次获取一个新的迭代器
    
        Iterator<String> itr2 = set.iterator();
        while (itr2.hasNext()){
            String next = itr2.next();
            System.out.println(next);
        }


在这里插入图片描述


4、无限循环

        Iterator<String> itr2 = set.iterator();
        while (itr2.hasNext()){
            String next = itr2.next();
            System.out.println(next);
        }


//一直问有没有数据,不做操作会进入死循环
        while(itr2.hasNext()){

        }

四、并发修改异常

1、产生原因

            当使用迭代器或者增强for循环遍历集合时,
                
            在迭代过程中调用集合类自身的remove或者add等方法改变集合的元素个数时,
                
            就会产生"ConcurrentModificationException",即"并发修改异常"
                
                "(两个对象同时在执行操作,造成冲突)"

        ArrayList<Integer> list=new ArrayList<>();
        
        list.add(11);
        list.add(22);
        list.add(33);
        list.add(44);
        list.add(55);

        Iterator<Integer> it1 = list.iterator();

//        迭代器在遍历集合,集合对象在删除数据,造成对数据处理的冲突
        while (it1.hasNext()){
            Integer number = it1.next();
            if(number%2==0){
                list.remove(number);
            }
        }

        System.out.println(list);   //ConcurrentModificationException : 并发修改异常
                                    // 两个对象同时在执行操作,造成冲突

在这里插入图片描述


2、解决办法

     1.使用普通for循环遍历元素,在循环中"使用集合自带的add或remove方法增删元素即可"
         
     2.如果使用迭代器遍历集合,在迭代过程中如果需要删除元素,可以"使用迭代器自带的remove方法"

     ArrayList<Integer> list=new ArrayList<>();
        
        list.add(11);
        list.add(22);
        list.add(33);
        list.add(44);
        list.add(55);

        Iterator<Integer> it1 = list.iterator();

        //解决办法:统一成一个对象就行
        while (it1.hasNext()){
            Integer number = it1.next();
            if(number%2==0){
               it1.remove();
            }
        }



        //也可以集合自己遍历删
        for (int i = 0; i < list.size(); i++) {
            Integer number = list.get(i);
            if(number%2==0){
                list.remove(number);
                i--;
            }
        }
    }
}

在这里插入图片描述


作者:KJ.JK

本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
搜索推荐 算法 Java
JAVA中的排序算法详解与实战
JAVA中的排序算法详解与实战
331 1
|
设计模式 自然语言处理 编译器
二十三种设计模式全面解析-解释器模式(Interpreter Pattern):用代码诠释语言的魅力
二十三种设计模式全面解析-解释器模式(Interpreter Pattern):用代码诠释语言的魅力
340 0
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度
RT-DETR改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度
294 2
RT-DETR改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度
|
机器学习/深度学习 数据采集 人工智能
Meta这篇语言互译大模型研究,结果对比都是「套路」
Meta这篇语言互译大模型研究,结果对比都是「套路」
945 0
|
Cloud Native 安全 Java
架构简洁之道:从阿里开源应用架构 COLA 说起
COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA 做了一次“升级”,在这次升级中,没有增加任何新的功能,而是尽量多删减了一些概念和功能,让 COLA 更简洁有效。
15172 1
架构简洁之道:从阿里开源应用架构 COLA 说起
|
移动开发 编解码 JavaScript
|
C#
C#将DLL嵌入到exe当中
原文:C#将DLL嵌入到exe当中 一、将dll文件加入工程 1.找到dll文件 可以在项目的“引用”下找到dll,并且根据属性中的“路径”找到文件所在目录;也可以使用bin目录下自动生成(其实就是复制)的dll文件  这里需要注意,“引用”下的dll,需要设置“复制本地”为False,这样在bin目录下生成exe的时候就不会顺便复制dll了(感觉这步可要可不要)。
2410 0
|
Docker 异构计算 容器
通过PID查看对应的docker
在nvidia-smi发现GPU占用时,想要寻找是哪个docker在使用,通过PID寻找。
1282 0
通过PID查看对应的docker
|
存储 Go UED
精通Go语言的命令行参数解析
【8月更文挑战第31天】
467 0
|
网络协议 安全 物联网
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第六版(IPv6)的发展历程、技术特点以及在现代网络中的应用。通过分析IPv4的局限性和IPv6的优势,阐述了IPv6对网络扩展性、安全性和性能提升的重要性。同时,文章还探讨了IPv6在实际部署中面临的挑战和解决方案,为读者提供了全面而深入的理解。

热门文章

最新文章