java Iterator源码
Iterator接口
java的Iterator是个接口,其定义了四个方法.主要是hasNext,Next方法.
public interface Iterator<E> {boolean hasNext();E next();default void remove() {throw new UnsupportedOperationException("remove");}default void forEachRemaining(Consumer<? super E> action) {Objects.requireNonNull(action);while (hasNext())action.accept(next());}
}
Iterator接口的实现
比如在ArrayList中有个内部类Itr实现了Iterator接口,如下
private class Itr implements Iterator<E> {//下一个元素的索引位置int cursor; //上一个元素的索引位置,初始值为-1int lastRet = -1;int expectedModCount = modCount;// prevent creating a synthetic constructorItr() {}public boolean hasNext() {//szie为ArrayList的大小,因为Itr是内部类,所以可以访问ArrayList的size field//如果索引的数组不等于size的大小,就返回false,表明还有下一个return cursor != size;}public E next() {checkForComodification();int i = cursor;//如果索引的值大于ArrayList的元素数量,抛出异常if (i >= size)throw new NoSuchElementException();Object[] elementData = ArrayList.this.elementData;//如果索引大于数组容量,报并发异常,why?if (i >= elementData.length)throw new ConcurrentModificationException();//游标往后移动一位,为后面做准备cursor = i + 1;//返回第i个元素return (E) elementData[lastRet = i];}public void remove() {if (lastRet < 0)throw new IllegalStateException();checkForComodification();try {//移除第i号元素ArrayList.this.remove(lastRet);cursor = lastRet;lastRet = -1;expectedModCount = modCount;} catch (IndexOutOfBoundsException ex) {throw new ConcurrentModificationException();}}@Overridepublic void forEachRemaining(Consumer<? super E> action) {Objects.requireNonNull(action);final int size = ArrayList.this.size;int i = cursor;if (i < size) {final Object[] es = elementData;if (i >= es.length)throw new ConcurrentModificationException();for (; i < size && modCount == expectedModCount; i++)action.accept(elementAt(es, i));// update once at end to reduce heap write trafficcursor = i;lastRet = i - 1;checkForComodification();}}final void checkForComodification() {if (modCount != expectedModCount)throw new ConcurrentModificationException();}}```
java Iterator源码相关推荐
- 阿里api网关接口客户端demo,java实现源码,其他语言可参考
访问阿里api网关接口客户端demo,java实现源码,其他语言可参考 上一篇文章 <阿里api网关接口创建.发布.授权.调试> 中,介绍了3个典型接口的创建并在阿里控制台调试完成,地址: ...
- 侯捷译Practical Java(含源码)
侯捷译Practical Java(含源码) [url=http://www.123xz.net/soft/49/297/308/2007/20070517105923.html][B]侯捷译Prac ...
- 确定有限状态机和非确定有限状态机详解 包含Java实现源码(Nondeterministic finite automata)
本文将讲解确定有限自动状态机和非确定有限自动状态机的特点和区别.将结合图片例子重点讲解什么是非确定有限自动状态机.最后讲解如何将非确定状态机转换为确定的状态机.多图预警!! 有限自动状态机可以分为确定 ...
- java B2B2C 源码 多级分销springmvc mybatis多租户电子商城系统--配置中心服务化和高可用...
在前两篇的介绍中,客户端都是直接调用配置中心的server端来获取配置文件信息.电子商务平台源码请加企鹅求求:一零三八七七四六二六. 这样就存在了一个问题,客户端和服务端的耦合性太高,如果server ...
- java B2B2C源码电子商务平台-基于Consul的分布式锁实现
分布式锁实现 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码:壹零叁八柒柒肆六二六 基于Consul的分布式锁主要利用Key/Value存储API中的ac ...
- java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解
我们从整体上来看一下Spring Cloud各个组件如何来配套使用: 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 从上图可以看出 ...
- Java集合源码分析(二)ArrayList
ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线 ...
- java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解...
我们从整体上来看一下Spring Cloud各个组件如何来配套使用: 从上图可以看出Spring Cloud各个组件相互配合,合作支持了一套完整的微服务架构. 其中Eureka负责服务的注册与发现, ...
- java象棋人机代码_中国象棋人机对弈Java版源码
[实例简介] 中国象棋人机对弈Java版源码,包含人工智能实现(含多个难度级别,采用α-β迭代搜索算法) [实例截图] [核心代码] 中国象棋人机对弈Java版源码 ├── boards │ ├─ ...
最新文章
- 《预训练周刊》第21期:FlipDA:有效且稳健的数据增强小样本学习、开放域低资源适应的生成式聊天机器人...
- 分站实现php,php城市分站是什么原理
- java编写自动化脚本生成apk_Unity3D研究院之Android全自动打包生成apk(六十九)
- Hi3531与Hi3520 GPIO口的对比及驱动的修改
- ActiveMQ入门-ActiveMQ跟SpringBoot整合发送接收Topic
- JavaScript变量和作用域
- 【Python】import自己的模块报错
- qq代理服务器哪里获取_哪里可以下载小学英语课件?这3个渠道,英语老师得赶快收藏...
- 【初始化】神经网络到底该如何初始化?吴恩达Deeplearning.ai最新干货|湾区人工智能...
- 黑金花大理石_石材用上黑金花,一看就是富豪家
- 图解硬盘分区调整/硬盘分区重新调整的好软件/Norton PartitionMagic 版本 8.05 硬盘分区调整/想把硬盘空间调整一下...
- 19-[模块]-xml
- 国内外优秀的源码网站
- 大数阶乘 nyoj28
- AutoCAD2012从入门到精通中文视频教程 第13课 正多边形(个人收藏)
- 安卓和IOS测试区别和注意点
- 计算机技术在材料成型工业中的应用,计算机在材料成型应用摘要.ppt
- 2017年sfdc工作总结_Duplicate, Matching Rule
- android错误之解析包时出现问题(一)
- 教你如何试用华为云服务器
热门文章
- 九江职业学院计算机专业怎么样,请问九江职业大学和九江职业技术学院,相比之下哪个好一点?...
- python中遇到的问题及解决方法_自己编程中遇到的Python错误和解决方法汇总整理...
- 宝塔面板如何将数据自动备份到阿里云OSS对象存储
- java .class 实例对象_Java产生Class类的三种实例化对象的方法
- 执行函数_PyCUDA(1)-执行核函数
- python 类 super_python的类的super()
- php中对数组进行转码,php实现转码的方式(支持数组类型转码)
- python一切皆对象的理解_Python难点解析---初级篇2.一切皆对象
- bootstrap日期控件 只显示 年月
- python 读取wifi数据_通过Python实现WiFi测试数据分析