当前位置:网站首页 > 技术博客 > 正文

简述java平台中迭代器的功能及使用方式



是属于设计模式之一,迭代器模式提供了一种方法来顺序访问一个聚合对象中各个元素,而不保留该对象的内部表示。

1)称为迭代器,主要用于遍历中的元素。
2)所有实现了的集合类都有一个方法,用以返回一个实现了,即可以返回一个。
3)仅用于遍历集合,本身并不存放对象。

✏️类结构图

在这里插入图片描述
通过观察类结构图的继承关系我们发现,集合的顶层接口继承接口。

✒️Iterable接口

 

在中有一个,它返回一个。

🖍️Iterator接口

 
📃Iterator接口的方法
返回值类型方法名功能booleanhasNext()判断集合是否还有元素,如果返回 true 表示集合还有元素,返回 false 表示集合中没有元素;一般对集合的访问通过 while(hasNext()) 判断是否还需要遍历。 E next()获取集合中遍历的当前元素 ;一般先调用 hasNext() 方法判断是否存在元素,再调用 next() 获取元素,需要进行循环交替遍历集合中的元素。voidremove删除集合中的元素。

🏷️使用迭代器遍历集合

我们用存放一些整型数据做示例,然后将其集合中的元素一一遍历打印输出。

 

运行结果:
在这里插入图片描述
观察运行结果我们发现,通过我们将中的元素一一打印了出来。

🔖Itertor的执行原理

在上述的示例中,迭代器是如何实现对集合的遍历呢?

⏳图示执行过程

在这里插入图片描述

⌛执行过程详解

①首先得到一个集合的迭代器
②进入,调用判断是否有下一个元素,返回true,移动一个位置,将该位置的元素111返回。
③再次进入,调用判断是否有下一个元素,返回true,移动一个位置,将该位置222的元素返回。
④再次进入,调用判断是否有下一个元素,返回true,移动一个位置,将该位置333的元素返回。
⑤再次进入,调用判断是否有下一个元素,返回false,循环结束。


迭代器的遍历过程中先通过方法判断是否有下一个元素,如果存在下一个元素再调用方法获取元素,在这里方法先往后移动一个元素位置,再返回该位置的元素。因此,在调用方法之前必须要调用方法进行检测;如果没有调用并且没有下一个元素,直接调用方法会抛出 。

🃏生成迭代器的快捷键

一开始使用迭代器可能会觉得麻烦,但是如果用的是有快捷键的,输入再回车就会直接生成。
在这里插入图片描述

⛄迭代器的remove()方法使用

Iterator接口中除了和方法外,还有一个方法,即删除集合中的元素

如删除上述示例集合中的元素111

 

运行结果:
在这里插入图片描述

☃️迭代器遍历中调用集合revome()方法触发异常

 

运行结果:
在这里插入图片描述
运行结果中抛出异常信息。这是因为触发了集合中并发修改的异常 接下来我们通过源码对抛出异常的原因进行剖析。

 

在集合的方法中,是通过返回对象来获得迭代器的。是的一个内部类,它实现了接口,代码如下:

 

Itr类属性

属性含义cursor索引下标,表示下一个可以访问的元素的索引,默认值为 0lastRet索引下标,表示上一个元素的索引,默认值为 -1expectedModCount对集合修改的版本号,初始值为 ModCount

ModCount定义在AbstractList接口中,初始值为0,定义如下:

 

ModCount是版本号,在对集合进行变更操作(增加、删除、修改等)的时候会对版本号进行 +1 操作。


结合上述代码进行抛出异常的解释。
①初始化ArrayList,添加三次元素,即三次调用方法,进行三次 此时,
②初始化Iterator迭代器进行循环,此时,
③进行hasNext判断,成立,进入循环
④调用方法,首先进行校验,,校验通过,返回值,此时

 

⑤调用集合方法,,此时
⑥再次调用hasNext()方法判断,成立,进入循环
⑦调用方法进行校验,,校验未通过,抛出异常

总结:

①在使用迭代器的操作时,会将更新后的给,两者会得到同步,但是在调用集合的方法后,两个不会进行同步,进而导致在校验时不通过,抛出异常。
②所以,在单线程下使用迭代器是没有问题的,但是在多线程下同时操作集合就不允许了,可以通过fail-fast快速失败机制,快速判断是否存在同时操作问题。因此,集合在多线程下使用是不安全的

📫认识增强for循环

可以代替Iterator迭代器,可以把它看做简化版的Iterator,和迭代器本质一样,其实它的底层实现就是Iterator迭代器,只能用于遍历集合或数组

📪基本语法

在这里插入图片描述

📬增强for循环的使用

 

运行结果:
在这里插入图片描述

📭增强for循环的快捷键

与迭代器一样,增强for循环也有快捷键,输入回车即可快速生成。
在这里插入图片描述

  • 上一篇: python 3.10
  • 下一篇: jw的w是什么
  • 版权声明


    相关文章:

  • python 3.102025-01-16 10:29:59
  • 深入理解java虚拟机最新版2025-01-16 10:29:59
  • 智能语音营销2025-01-16 10:29:59
  • 单例模式 java实现2025-01-16 10:29:59
  • 网络爬虫需要什么软件2025-01-16 10:29:59
  • jw的w是什么2025-01-16 10:29:59
  • 虚拟机下载安装2025-01-16 10:29:59
  • 怎样把代码封装成软件2025-01-16 10:29:59
  • 在线客服界面2025-01-16 10:29:59
  • phpjpg一句话木马2025-01-16 10:29:59