首页 > 其他分享 >9-迭代器

9-迭代器

时间:2024-09-08 15:49:09浏览次数:7  
标签:迭代 cc ArrayList list add println

迭代器

        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        list.add("ee");
        
        //迭代器遍历:
        Iterator it = list.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

iterator(),Iterator,Iterable关系

  • ArrayList集合--->(implements)List接口--->(extends)Collection接口--->(extends)Iterable接口--->(抽象方法)iterator()
  • 抽象方法要在具体的实现类中得到实现(此实现类是ArrayList)
  • iterator()方法返回类型是Iterator接口
  • Iterator接口中有两个经典方法:hasNext(),next()-->抽象方法----那么抽象方法在哪里具体实现呢?--->返回值的实现类
  • 在Itr这个类中得到具体实现(而该类是ArrayList的内部类)

hasNext(),next()的具体实现

  • Itr是ArrayList的内部类
  • Itr中实现了接口Iterator接口中定义的经典方法hasNext(),next()

增强for循环

  • 增强for循环 底层也是通过迭代器实现的

ListIterator迭代器

  • 加入字符串
        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        list.add("ee");
        //在“cc”之后添加一个字符串“kk”
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            if("cc".equals(it.next())){
                list.add("kk");
            }
        }
//发现报错:
Exception in thread "main" java.util.ConcurrentModificationException
    //并发修改异常
  • 出错原因:迭代器和list同时对集合进行操作
  • 解决办法:事情让一个"人"做--->引入新的迭代器:ListIterator
  • 迭代和添加操作都是靠ListIterator来完成
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        list.add("ee");
        //在“cc”之后添加一个字符串“kk”
        ListIterator<String> it = list.listIterator();
        while (it.hasNext()){
            if("cc".equals(it.next())){
                it.add("kk");//通过迭代器进行添加(只让一个“人”操作)
            }
        }

        System.out.println(list);//查看输出
        System.out.println(it.hasNext());//是否还有下一元素--false
        System.out.println(it.hasPrevious());//看前面是否还有元素--true
        //逆向遍历
        while (it.hasPrevious()){
            System.out.println(it.previous());
        }
        System.out.println(it.hasNext());//true---逆向遍历完后指针指向第一个元素
        System.out.println(it.hasPrevious());//false---此时指针在第一个元素,前面没有元素了
        System.out.println(list);
        
//输出:
[aa, bb, cc, kk, dd, ee]
false
true
ee
dd
kk
cc
bb
aa
true
false
[aa, bb, cc, kk, dd, ee]
        

标签:迭代,cc,ArrayList,list,add,println
From: https://www.cnblogs.com/Mc9r4dy/p/18402940

相关文章

  • 多线程篇(阻塞队列- BlockingQueue)(持续更新迭代)
    目录一、了解什么是阻塞队列之前,需要先知道队列1.Queue(接口)二、阻塞队列1.前言2.什么是阻塞队列3.Java里面常见的阻塞队列三、BlockingQueue(接口)1.前言2.简介3.特性3.1.队列类型3.2.队列数据结构2.简介4.核心功能入队(放入数据)出队(取出数据)总结四......
  • 【C++】简单易懂的vector迭代器
    一、迭代器的本质vector的迭代器本质上就是一个被封装的指针。迭代器的用法和指针的用法十分相似,就是一个像指针的假指针,我们不妨把迭代器看作一个伪指针。二、迭代器的使用句式(可以看到迭代器和指针很像):迭代器有四种:1、正向迭代器:容器名<类型>::iterator迭代器名2、常......
  • python_August(迭代器、生成式)
    目录迭代器三元表达式列表推导式字典生成器拉链函数迭代器可迭代对象:只要拥有iter方法的对象就是可迭代对象,下面的除了前两个,从字符串开始都是可迭代对象height=180 #整型salary=3.2 #浮点型name='nick' #字符串hobby_list1=['run','read'] #列表hobby_tup=......
  • 基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
    1.课题概述基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,对比UKF,EKF迭代UKF,迭代EKF四种卡尔曼滤波的控制效果。2.系统仿真结果3.核心程序与模型版本:MATLAB2022aX_iukf=zeros(2,Times1);X_iukf(:,1)=state0;P_iukf=zeros(2,2,Times1);P_iukf(:,:,1......
  • 基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
    1.课题概述       基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,对比UKF,EKF迭代UKF,迭代EKF四种卡尔曼滤波的控制效果。 2.系统仿真结果  3.核心程序与模型版本:MATLAB2022a%迭代扩展卡尔曼滤波X_iukf=zeros(2,Times1);X_iukf(:,1)=state0......
  • Leangoo领歌Scrum工具:Sprint Backlog迭代管理的最佳实践
    ​在敏捷开发中,迭代管理是确保项目持续推进、不断优化的重要环节。有效的迭代管理能够帮助团队快速响应变化,持续交付高质量产品。Leangoo是一款免费的敏捷项目管理工具,为团队提供了直观、高效的看板管理方式来管理迭代过程。本文将探讨如何使用Leangoo进行迭代管理,帮助团队更好......
  • OpenHarmony中的HDF单链表及其迭代器
    概念为了性能考虑,嵌入式系统一般使用C语言进行开发,由于C语言标准库没有封装链表,所以嵌入式系统一般自己设计和实现链表这种数据结构。单链表是链表中的一种,本文描述OpenAtomOpenHarmony(以下简称“OpenHarmony”)中HDF软件模块自己定义的单链表,并学习其设计和实现方法。其中包含一些......
  • 从实在智能最新发布的实在Agent 7.0,看RPA Agent的迭代升级
     智能体进化发展了一年,现在的RPAAgent迭代到什么程度了?从实在智能最新发布的实在Agent7.0,看RPAAgent的迭代升级抓取豆瓣信息、自己制作PPT,这款AIAgent真的实现了流程全自动化AIAgent构建到执行全自动化,持续进化RPAAgent再次降低智能体应用门槛实在智能重磅发布实在......
  • 智能体进化发展了一年,现在的RPA Agent迭代到什么程度了?
    智能体进化发展了一年,现在的RPAAgent迭代到什么程度了?抓取豆瓣信息、自己制作PPT,这款AIAgent真的实现了流程全自动化AIAgent构建到执行全自动化,持续进化RPAAgent再次降低智能体应用门槛C端AIAgent构建与应用实现端到端,这个智能体构建平台真的不一般文/王吉伟智能体的爆发,意味......
  • 多线程篇(ThreadLocal & 内存模型 & 伪共享(ThreadLocal ))(持续更新迭代)
    目录一、ThreadLocal1.前言2.简介3.与Synchronized的区别4.简单使用5.原理5.1.set5.2.get5.3.remove5.4.与Thread,ThreadLocalMap之间的关系5.常见使用场景场景一:存储用户Session场景二、数据库连接,处理数据库事务场景三、数据跨层传递(controller,servi......