首页 > 其他分享 >02Collection的遍历方式

02Collection的遍历方式

时间:2023-10-30 13:13:56浏览次数:35  
标签:遍历 迭代 方式 add next coll 02Collection 集合

Collection的遍历方式

  • 遍历器遍历
  • 增强for循环遍历
  • Lambda表达式遍历
  • 普通for只有List系列的才能用,Set用不了

一、迭代器遍历

  • iterator n.迭代器,迭代程序。

  • 迭代器不依赖索引。

  • 迭代器遍历就是把元素一个一个的获取出来

    01迭代器遍历

二、迭代器的Iterator类,和它的常用方法

  • 迭代器在java中的类是Iterator,迭代器是集合专用的遍历方式。

  • Collection集合获取迭代器:

    方法名称 说明
    Iterator iterator() 返回迭代器默认对象,默认指向当前集合的0索引

    迭代器常用方法:

    方法名称 说明
    boolean hasNext() 判断当前位置是否有元素,有元素返回true,没有元素返回false
    E next() 获取当前位置的元素,并将迭代器对象移向下一个位置。
  • 迭代器对象我们可以给它看作“光标,指针,箭头”,都无所谓。

    Iterator<String> it = list.iterator();:创建指针,获取迭代器,默认指向集合的0索引

    boolean flag = it.hasNext();:判断当前位置是否有元素。

    String str = it.next();:获取当前指向的元素,移动指针。

    Sysout.out.println(str);

  • 获取所用元素,可以利用循环:

    Iterator<String> it = list.iterator();
    while(it.hasNext()){
        String str = it.next();
        System.out.println(str);
    }
    

    案例:

    package com.mycollection;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class A03_CollectionDemo3 {
        /*
        Collection的遍历方式
             遍历器遍历
             增强for循环遍历
             Lambda表达式遍历
             普通for只有List系列的才能用,Set用不了
    
         迭代器遍历的三个方法:
             Iterator<String> it  = list.iterator();:创建指针,获取迭代器,默认指向集合的0索引
             boolean flag = it.hasNext();:判断当前位置是否有元素。
             String str = it.next();:获取当前指向的元素并移动指针。
         */
        public static void main(String[] args) {
            //1.创建集合并添加元素
            Collection<String> coll = new ArrayList<>();
            coll.add("aaa");
            coll.add("bbb");
            coll.add("ccc");
            coll.add("ddd");
    
            //2.获取迭代器对象
            //迭代器就好比一个箭头,默认指向集合的0索引处。
            Iterator<String> it = coll.iterator();
            //3.利用循环不断的去获取集合中的每一个元素
            while(it.hasNext()){
                String str = it.next();
                System.out.println(str);
            }
    
        }
    }
    

    1

三、注意细节点

  1. 报错:NoSuchElementException :没有这个元素,异常
  2. 迭代器遍历完毕,指针不会复位,要想再次遍历,只能重新获取一次新的迭代器的对象。
  3. 循环中只能用一次next方法,不能用多次。
  4. 迭代器遍历时,不能用集合的方法进行增加或者删除

案例:

package com.mycollection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class A04_CollectionDemo4 {
    /*
        1. 报错:NoSuchElementException :没有这个元素,异常
        2. 迭代器遍历完毕,指针不会复位,要想再次遍历,只能重新获取一次新的迭代器的对象。
        3. 循环中只能用一次next方法,不能用多次。
        4. 迭代器遍历时,不能用集合的方法进行增加或者删除
     */
    public static void main(String[] args) {
        //1.创建集合并添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");

        //2.获取迭代器对象
        //迭代器就好比一个箭头,默认指向集合的0索引处。
        Iterator<String> it = coll.iterator();
        //3.利用循环不断的去获取集合中的每一个元素
        while(it.hasNext()){
            String str = it.next();
            System.out.println(str);
        }
        //当上面循环结束了之后,迭代器的指针已经指向了最后没有元素的位置。
        //System.out.println(it.next()); //会报错:NoSuchElementException

        //迭代器遍历完毕,指针不会复位。
        System.out.println(it.hasNext());//false
        //System.out.println(it.hasNext());//false
        //System.out.println(it.hasNext());//false

        //如果说要继续第二次遍历集合,只能再次获取一个新的迭代器对象。
        Iterator<String> it2 = coll.iterator(); //跟上面是两个互相独立的迭代器对象。
        while(it2.hasNext()){
            String str = it2.next();
            System.out.println(str);
        }


    }
}

运行结果:

2

  • next(),可以移动指针,用第一次移动了一个指针,用多次移动了多次指针,所以hasNext()和next是配套的,否则可能会报:NoSuchElementException。

    案例:

    package com.mycollection;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class A05_CollectionDemo5 {
        /*
            1. 报错:NoSuchElementException :没有这个元素,异常
            2. 迭代器遍历完毕,指针不会复位,要想再次遍历,只能重新获取一次新的迭代器的对象。
            3. 循环中只能用一次next方法,不能用多次。
            4. 迭代器遍历时,不能用集合的方法进行增加或者删除
         */
        public static void main(String[] args) {
            //1.创建集合并添加元素
            Collection<String> coll = new ArrayList<>();
            coll.add("aaa");
            coll.add("bbb");
            coll.add("ccc");
            coll.add("ddd");
            coll.add("eee");
    
            //2.获取迭代器对象
            //迭代器就好比一个箭头,默认指向集合的0索引处。
            Iterator<String> it = coll.iterator();
            //3.利用循环不断的去获取集合中的每一个元素
            while(it.hasNext()){
                //4.next方法的两件事情:获取元素并移动指针。
                System.out.println(it.next());
                System.out.println(it.next());
            }
        }
    }
    

    运行结果:

    3

  • 迭代器遍历时,不能用集合的方法进行增加或者删除

    • 这个暂时当一个结论先行记忆
    • 如果我实在要删除:那么可以用迭代器提供的remove方法进行删除。
    • 如果要添加,暂时没有办法。

    案例:

    package com.mycollection;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class A05_CollectionDemo5 {
        /*
            1. 报错:NoSuchElementException :没有这个元素,异常
            2. 迭代器遍历完毕,指针不会复位,要想再次遍历,只能重新获取一次新的迭代器的对象。
            3. 循环中只能用一次next方法,不能用多次。
            4. 迭代器遍历时,不能用集合的方法进行增加或者删除
         */
        public static void main(String[] args) {
            //1.创建集合并添加元素
            Collection<String> coll = new ArrayList<>();
            coll.add("aaa");
            coll.add("bbb");
            coll.add("ccc");
            coll.add("ddd");
            coll.add("eee");
    
            //2.获取迭代器对象
            //迭代器就好比一个箭头,默认指向集合的0索引处。
            Iterator<String> it = coll.iterator();
            //3.利用循环不断的去获取集合中的每一个元素
            while(it.hasNext()){
                String str = it.next();
                if("bbb".equals(str)){
                    coll.remove("bbb");
                }
                System.out.println(str);
            }
        }
    }
    

    运行结果:ConcurrentModificationException :并发修改异常

    4

    • 不能用集合中的方法删除,但是可以用迭代器中的方法删除。
    package com.mycollection;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class A05_CollectionDemo5 {
        /*
            1. 报错:NoSuchElementException :没有这个元素,异常
            2. 迭代器遍历完毕,指针不会复位,要想再次遍历,只能重新获取一次新的迭代器的对象。
            3. 循环中只能用一次next方法,不能用多次。
            4. 迭代器遍历时,不能用集合的方法进行增加或者删除
         */
        public static void main(String[] args) {
            //1.创建集合并添加元素
            Collection<String> coll = new ArrayList<>();
            coll.add("aaa");
            coll.add("bbb");
            coll.add("ccc");
            coll.add("ddd");
            coll.add("eee");
    
            //2.获取迭代器对象
            //迭代器就好比一个箭头,默认指向集合的0索引处。
            Iterator<String> it = coll.iterator();
            //3.利用循环不断的去获取集合中的每一个元素
            while(it.hasNext()){
                //4.next方法的两件事情:获取元素并移动指针。
                //System.out.println(it.next());
    
                String str = it.next();
                if("bbb".equals(str)){
                    //coll.remove("bbb");
                    //不能用集合中的方法删除,但是可以用迭代器中的方法删除。
                    it.remove();
                }
            }
            System.out.println(coll);
        }
    }
    

    运行结果:

    5

四、总结

  1. 迭代器在遍历集合的时候是不依赖索引的。

  2. 迭代器需要掌握三个方法:

    Iterator<String> it = list.iterator();
    while(it.hasNext()){
        String str = it.next();
        System.out.println(str);
    }
    
  3. 迭代器的四个细节:

    • 如果当前位置没有元素,还要强行获取,会包NoSuchElementException
    • 迭代器遍历完毕,指针不会复位。
    • 循环中只能用一次next方法。
    • 迭代器遍历是,不用集合的方法对集合本身进行增加或者删除,但是遍历之后可以。

标签:遍历,迭代,方式,add,next,coll,02Collection,集合
From: https://www.cnblogs.com/ahbzbn/p/17797565.html

相关文章

  • 03Collection的遍历方式二
    二、增强for遍历增强for的底层就是迭代器,为了简化迭代器的代码书写的。它是JDK5之后出现的,其内部原理就是一个Iterator迭代器所有的单列表集合和数组才能用增强for进行遍历格式:for(元素的数据类型变量名:数组或者集合){}for(Strings:list){System......
  • 【java基础-实战3】list遍历时删除元素的方法
    在实际的业务开发中,容器的遍历可以说是非常非常常见的场景了,遍历删除呢,用的机会也比较多,那么有哪几种删除元素的方法呢?你用对了吗~本文循序渐进,先说几种容易出问题的方法,再引出几种比较可靠的方法~首先,初始化一个数组,用于后面的事例演示:List<Integer>list=newArrayList<>();......
  • 集群/堆叠的常用部署实施方式,你会吗?
    你们好,我的网工朋友。交换机的连接方式大家应该都知道吧,一共有三种,分别是:级联、堆叠和集群。级联一般用来实现多台交换机之间的互相连接。堆叠和集群,就总有网工把这两给搞迷糊了。堆叠就是将多台支持堆叠特性的交换机通过堆叠线缆连接在一起,从逻辑上虚拟成一台交换设备,作为一个整体......
  • 算法:实现中序遍历(3种方法图例详解,小白也能看懂)
     中序遍历:左->中 ->右练习地址:力扣(LeetCode)官网-全球极客挚爱的技术成长平台1、递归法 #Definitionforabinarytreenode.classTreeNode(object):def__init__(self,val=0,left=None,right=None):self.val=valself.left=left......
  • 浅析SpringBoot加载配置的6种方式
    从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一,但就是这么常用的功能,仍然有很多开发者抓狂~今天带大家简单回顾一下这六种的使用方式:说明Environment对象Environment是springboot核心的环境配置接口,它提供了简单的方法来访问应用程序属性,包括系统属......
  • CentOS7 以rpm包方式升级内核
    RPM包方式安装后,查看内核启动序号:[root@localhost~]awk-F\''$1=="menuentry"{print$2}'/etc/grub2.cfgCentOSLinux(4.4.179-1.el7.elrepo.x86_64)7(Core)CentOSLinux(3.10.0-693.el7.x86_64)7(Core)CentOSLinux(0-rescue-6d4c599606814867814......
  • JS点击空白关闭弹窗的方式
    12$(document).mouseup(function(e){3varpop=$('popDialog');4if(!pop.is(e.target)&&pop.has(e.target).length===0){5//可以在这里关闭弹窗6somecode...7}8});9判断点击事件发生在区域外的两个条件:点......
  • 嵌入式硬件中常见的100种硬件选型方式
    1请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌)。电阻:美国:AVX、VISHAY威世日本:KOA兴亚、Kyocera京瓷、muRata村田、Panasonic松下、ROHM罗姆、susumu、TDK台湾:LIZ丽智、PHYCOM飞元、RALEC旺诠、ROYALOHM厚生、SUPEROHM美隆、TA-I大毅、TMTEC泰铭、TOK......
  • 嵌入式硬件库的基本操作方式与分析
    本次要介绍的开源软件是c-periphery:https://github.com/vsergeev/c-periphery一个用C语言编写的硬件外设访问库。我们可以用它来读写Serial、SPI、I2C等,非常适合在嵌入式产品上使用。我们可以基于它优秀的代码框架,不断地扩展出更多的功能模块,最终形成自己产品适用的Linux硬......
  • Nacos注册中心有几种调用方式?
    SpringCloudAlibabaNacos作为近几年最热门的注册中心和配置中心,也被国内无数公司所使用,今天我们就来看下Nacos作为注册中心时,调用它的接口有几种方式?1.什么是注册中心?注册中心(Registry)是一种用于服务发现和服务注册的分布式系统组件。它是在微服务架构中起关键作用的一部......