迭代器Iterator

Java34

迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素

以ArrayList中内部类itr实现的迭代器为例。

源码:

测试forEachRemaining例子

注意:在遍历集合的时候,有一个modCount表示集合的元素被修改的次数,每次增加或删除一个元素的时候,modCount都会加一,而expectedModCount用于记录在集合遍历之前的modCount ,检查这两者是否相等就是为了检查集合在迭代遍历的过程中有没有被修改,如果被修改了,就会在运行时抛出ConcurrentModificationException这个RuntimeException,但是使用Iterator的remove方法是可以的(删除的是迭代器指向的当前元素),在集合的元素被remove之后,expectedModCount被重新赋值,是的modCount总是等于expectedModCount,所以不会抛出ConcurrentModificationException异常。

测试代码

```
public static void main(String[] args) {
ArrayList arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

Spring Boot 操作 Redis

参考资料 说在前面 步骤 1. 新建 Maven 项目并引入 spring-boot-starter-data-redis 2. 编写 application.yml 3. 编写缓存服务和Contro...
Java

失物招领网站

校园失物招领网站 | lijinghai 项目介绍 📖 👉基于Springboot+vue+uni-app的校园失物招领平台. 含平台主体PC端、微信小程序和web后台数据管理平台. 失物招领信息一览...
Java

springcloud

转载于狂神老师 ,本文仅作为笔记使用 回顾之前的知识~●JavaSE ●数据库●前端●Servlet ●Http ●Mybatis ●Spring ●SpringMVC ●SpringBoot ●Du...
Java

打工四年总结的数据库知识点

国庆节在家里很无聊。我在家里翻阅了与数据库相关的书籍,我对它上瘾了。因为我忘记了一些大学熟悉的数据库范例,我好奇地读了一点国庆节。[En]The National Day was boring at ...
Java

第一次的ssm整合

数据库表 导入依赖 ``` javax.servlet javax.servlet-api 4.0.1 provided org.junit.jupiter junit-jupiter-api ${j...
Java

2.java基础笔试

1.Java中的jdk是什么?jre是什么? 答:jdk是Java的开发工具包,主要包含了各种类库和工具,也包含了一个jre。 jre是Java程序的运行环境 2.什么是Java平台的无关性? 答:我...
Java

【每日算法】二分查找法

模板 例题 367. 有效的完全平方数 描述 示例1 示例2 提示 思路 代码 69.x的平方根 描述 示例1 示例2 提示 代码 模板 ``` left,right=1,n
Java

线程安全策略

本文基于图灵课堂周瑜老师的讲解整理,包括spring bean加载的过程,主要是扫描BeanDefinition以及初始化非懒加载单例Bean两部分,源码取自SpringFramework 5.3.2...