List之迭代器

这篇具有很好参考价值的文章主要介绍了List之迭代器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

用过集合都知道,除了for循环遍历集合,还有一种方式就是迭代器,今天我们介绍的就是迭代器。

迭代器和集合的关系

List之迭代器
由上图我们可以看出,List接口继承了Iterable接口的,相当于List下面的集合都可以实现,Iterable接口的方法。这里我们主要拿ArrayList来讲解。首先我们看下List使用迭代器的基本用法
javaArrayList list = new ArrayList<>();
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
这是一个简单的集合遍历,不过采用的迭代器进行的。接下来我们看下它的源码实现.
List之迭代器

这个是在ArrayList的内部类,实现了Itreable接口,而ArrayList实现类调用的hasNext()方法和next方法均是,这个内部类Itr的方法。然后从上面的代码,我们可以看出迭代判定是否往下继续执行的条件,就是看cursor是不是大于等于size,然后在每次的next方法中将cursor加加一。那这个cursor的初始值是在哪里赋值的呢。接着往下看。
List之迭代器
首先list调用了iterator方法,返回值是一个迭代器,iterator方法又调用了listIterator()方法。然后这个listIterator方法又怎么实现了对cursor的初始化呢。接着往下看
List之迭代器
List之迭代器
List之迭代器
最后通过层层调用实现了对,cursor的初始化,到这里,大家是不是对ArrayList中的迭代器有了一定的了解。那么接下来,我们看一下实际中可能出现的问题。

迭代器使用中可能出现的问题

首先呢,大家看下下面的代码
List之迭代器
大家觉得这段代码有什么问题吗,第一眼看过去,大家是不是都觉得没什么问题,但是实际上呢,他是有问题的。
List之迭代器
实际上却会报异常,这个是因为什么呢,大家可以仔细看下next的方法,然后看下ArrayList的add()方法(如果之前有没有看过源码的同学,可以看我之前的文章里面有介绍的),就会发现他们是对同一个数组进行操作,如果在不同的位置还好,但是如果在统一个位置的话,便会造成并发冲突。

总结

迭代器这一部分,按理来说,我应该放到ArrayList那一部分一起分享的。但是因为篇幅原因,所以单独拿出来写了一篇博客,所以干活内容不是很多,望大家见谅。文章来源地址https://www.toymoban.com/news/detail-480526.html

到了这里,关于List之迭代器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 遍历集合List的五种方法以及如何在遍历集合过程中安全移除元素

    测试数据 1. 普通for循环 普通for循环,通过索引遍历 2. 增强for循环 增强for循环,数组以及所有Collection集合都可以使用增强for循环遍历。遍历集合的实际原理为获取集合的iterator迭代器对象进行迭代遍历。 3. Iterator迭代器遍历 Collection接口继承自Iterable接口,所有Collection集合都

    2024年02月13日
    浏览(45)
  • List集合的五种遍历方式

    目录 一、List五种遍历方式  1、普通for遍历 2、 增强for遍历  3、Lambda表达式  4、迭代器遍历  5、列表迭代器 方法 说明 迭代器遍历 在遍历的过程中需要删除元素,请使用迭代器。 列表迭代器 在遍历的过程中需要添加元素,请使用列表迭代器。 增强for遍历 仅仅想遍历,那

    2024年02月10日
    浏览(47)
  • 抛弃for循环遍历list

    Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 filter filter:过滤,就是过滤器,符合条件的通过,不符合条件的过滤掉 map map:映射,

    2024年02月20日
    浏览(41)
  • 【Python】列表 List ⑦ ( 列表遍历 | 使用 while 循环遍历列表 | 使用 for 循环遍历列表 | while 循环 与 for 循环对比 )

    将 列表 容器 中的数据元素 , 依次逐个取出进行处理的操作 , 称为 列表的遍历 ; 使用 while 循环 遍历 列表容器 : 元素访问方式 : 使用 下标索引 访问 列表中的元素 ; 循环控制 : 循环控制变量 : 用于指示当前循环的 下标索引 ; 循环条件 : 设置为 循环控制变量 ( 下标索引 ) 列表

    2024年02月06日
    浏览(61)
  • 【Java】List集合遍历的五种方法

    🎊专栏【Java】 🌺每日一句:人生最重要的就是要清醒的认知 ⭐欢迎并且感谢大家指出我的问题 目录 1.通过for循环配合List接口中的size()和get(index i)的方法 2.使用Iterator迭代器及其方法遍历集合 🍔迭代器 🍔具体操作 3.增强for循环遍历 🍔是for循环的一种 🍔格式 🍔好处 🍔弊

    2024年02月03日
    浏览(56)
  • Python循环中删除元素技巧:避免迭代错误的新列表方法和倒序遍历

      在Python中,如果你在循环过程中边遍历边删除列表元素,可能会导致一些意外的结果,因为在循环中直接修改正在迭代的列表可能会导致迭代错误或不一致的结果。这是因为在修改列表的同时,迭代器可能会失效。 为了安全地遍历列表并删除元素,可以考虑使用新的列表来

    2024年01月17日
    浏览(53)
  • 设计模式学习笔记 - 设计模式与范式 -行为型:9.迭代器模式(上):相比直接遍历集合数据,使用迭代器模式有哪些优势?

    上篇文章,我们学习了状态模式。状态模式是状态机的一种实现方式。它通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,以此来避免状态机类中的分支判断逻辑,应对状态机类代码的复杂性。 本章,学习另外一种行为型设计模式,迭代器模式。它用来遍历集

    2024年04月15日
    浏览(57)
  • Java02-迭代器,数据结构,List,Set ,TreeSet集合,Collections工具类

    目录 什么是遍历? 一、Collection集合的遍历方式 1.迭代器遍历 方法 流程 案例 2. foreach(增强for循环)遍历 案例 3.Lamdba表达式遍历 案例 二、数据结构 数据结构介绍 常见数据结构 栈(Stack) 队列(Queue) 链表(Link) 散列表(Hash Table) 树(Tree) List接口 ArraysList集合 Linked

    2024年02月14日
    浏览(47)
  • Python——迭代器(可迭代、可迭代对象、迭代器、遍历本质、iter函数、next函数、__iter__方法、__next__方法、自定义可迭代对象与自定义迭代器、for循环本质)

    迭代(iter) 我们经常听说过\\\"版本迭代\\\"这个词,意思是在原来版本的基础上,再提升一个版本的过程。那么我们仅仅看看\\\"迭代\\\"这个词,会发现迭代就是一个根据原来的状态决定本次状态的过程 迭代应用于Python中,迭代具体是指根据原来的数据输出(并不一定是要打印,也可

    2024年02月04日
    浏览(57)
  • 任何时候都不要在 for 循环中删除 List 集合元素!!!

    首先说结论:无论什么场景,都不要对List使用for循环的同时,删除List集合元素,因为这么做就是不对的。 阿里开发手册也明确说明禁止使用foreach删除、增加List元素。 正确删除元素的方式是使用迭代器(Iterator),代码如下: JDK8后lambda写法: 不想知道为什么不能使用for循

    2023年04月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包