当前位置: 首页 > news >正文

你知道迭代器 Iterator 是什么吗?

微信搜索《Java鱼仔》,每天一个知识点不错过

(一)每天一个知识点

你知道迭代器 Iterator 是什么吗?

(二)回答

迭代器模式是二十三种设计模式之一,这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

在Java中,通过iterator.hasNext()检测是否存在下一条记录,通过iterator.next遍历集合中的元素。

有关迭代器的执行原理可以参考下图:

在这里插入图片描述
综合上图,迭代器的使用可以分为以下四步:

1、集合使用iterator()方法返回一个Iterator对象,未执行next方法前,Iterator 指向的是第一个元素的前一个元素。

2、调用hasNext方法判断是否还有元素。

3、执行next()方法将指针下移,指向集合中的下一个元素。

有关迭代器的注意点:

在使用迭代器时,迭代过程中如果要删除元素不能使用list的删除方法,需要使用iterator的删除方法。比如下面这段代码:

@Test
public void testMethod(){
    List list=new ArrayList();
    list.add("1");
    list.add("2");
    list.add("3");
    Iterator iterator=list.iterator();
    while (iterator.hasNext()){
        String object = (String) iterator.next();
        if ("3".equals(object)){
            list.remove(object);
        }
    }
    System.out.println(list);
}

这段代码使用list去删除“3”这个元素,结果就会报ConcurrentModificationException错误

在这里插入图片描述
这个报错的原因需要读集合的源码,这里不做更多的扩展,正确的删除方式如下:

//list.remove(object);  错误
iterator.remove();

相关文章:

  • 什么是乐观锁、什么是悲观锁,两种锁在Java中的具体应用场景有哪些
  • Error: Out of memory! attempting SFTP connectio
  • 谈一谈session和cookie的区别,以及session的实现机制
  • Android--activity获取返回值
  • 你能说出四种创建线程的方式吗?
  • IOS 多线程01-线程基础知识
  • 说一下runnable 和 callable 有什么区别?Future是什么?
  • Spring MVC 3.0 深入及对注解的详细讲解
  • 线程的 run()和 start()有什么区别?sleep() 和 wait() 有什么区别?
  • 你对线程池的了解有多少?知道为什么阿里不让用Java提供的线程池吗?
  • Android音频底层调试-基于tinyalsa
  • 关于Java多线程锁的升级原理,这篇文章会让你另有收获
  • 关于动态代理,你能说出动态代理的几种方式?
  • WebKit 源码分析 -- loader
  • 反射的原理是什么,反射创建类实例的三种方式是什么?
  • 《Java编程思想》读书笔记-对象导论
  • java 多线程基础, 我觉得还是有必要看看的
  • java第三方包学习之lombok
  • laravel 用artisan创建自己的模板
  • Phpstorm怎样批量删除空行?
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SegmentFault 2015 Top Rank
  • Tornado学习笔记(1)
  • XForms - 更强大的Form
  • 给Prometheus造假数据的方法
  • 构造函数(constructor)与原型链(prototype)关系
  • 经典排序算法及其 Java 实现
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 字符串匹配基础上
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​Python 3 新特性:类型注解
  • ​用户画像从0到100的构建思路
  • # C++之functional库用法整理
  • #162 (Div. 2)
  • (6)STL算法之转换
  • (javascript)再说document.body.scrollTop的使用问题
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)Linux+Windows下安装ffmpeg
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)创业家杂志:UCWEB天使第一步
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .bashrc在哪里,alias妙用
  • .net 4.0发布后不能正常显示图片问题
  • .net core 6 redis操作类
  • .NET Micro Framework初体验(二)
  • .NetCore项目nginx发布
  • .net打印*三角形
  • .net对接阿里云CSB服务
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • /etc/sudoer文件配置简析
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘