在使用迭代器的时候,我总是被next(),hasNext()到底指向哪一个元素给迷惑,这次自己读了读原码,总算对相关的知识有了一丁点了解,这次就来分享一下。
------2021.5.3------
忘了这玩意儿是什么时候写的了,如果要深入了解Iterator,那就去看看迭代器模式
对于hasNext()
public boolean hasNext() {
return cursor != size;
}
其实现方式是如果游标还没有达到容器的size大小,就返回true,这里与许多人解释的方式不一样, hasNext()不是指有没有下一个元素,而是指有没有当前元素,不然按照很多讲解方法,判断有没有下一个元素,那每次ArrayList中的最后一个元素不就遍历不到了吗?
下面我来画一个图,更好的说明一下
这里放一个size=7 的数组
可以看到,当cursor指向最后一个元素,即cursor=6时,hasNext()返回的是true,而不是返回的元素6的后一个元素,所以我个人认为,hasNext()这个函数名有一点迷惑性,如果改成hasCurrent()可能会好一点。
同理,对于next(),返回的也不是下一个元素
public E next() {
checkForComodification();
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1;//将游标后移一位
return (E) elementData[lastRet = i];//i 存储的是游标cursor改变之前的值
}
我们看到next()的原码,它是取出当前元素,然后将游标cursor后移一位
下面我再画一个图解释一下
这里假设游标在调用next()方法前指向的是元素3
调用next方法时,游标先后移一位,但要记录下移动之前的位置i
然后返回游标移动前位置的值
可见,next()中的next,不是为了取游标的下一个元素,而是在取完当前元素后,将游标往后移一位。
对于代码的学习,我不喜欢只看帮助文档,只知道怎么使用的“不求甚解”学习法,要在力所能及的情况下,尽可能知道方法的底层实现的学习方法,才是学习代码的正道。
跳板机的作用:保障网络和数据不受来自外部和内部用户的入侵和破坏堡垒机的功能:登陆功能、账号管理、身份认证、资源授权、访问控制_jumpserver部署
摘 要 IAbstract II引 言 1第1章 课题概述 21.1 课题内容 21.2 课题背景 21.3 课题意义 31.4 运行环境 31.5 相关技术 31.5.1 Python语言 31.5.2 Flask框架 41.5.3 ECharts图表库 41.5.4 Jieba库 51.5.5 Pysql包 51.6 本章小结 5第2章 系统设计 62.1 设计思想 62.2 需求分析 62.3 系统可行性分析 72.4 功能设计 72.4.1系统功能结构 7_基于python的可视化系统毕业设计论文
第五章:过程数据库和过程能力基线(PPT.177-198)1.软件度量的含义、作用(PPT.177-178)含义:软件度量可以来量化地描述软件过程和软件产品的不同方面的特点。作用:项目计划、控制项目过程、分析和改进组织过程2.过程数据库定义、数据及含义(PPT.180-182)定义:PDB 是存放从项目可获得的过程性能数据的数据库,这些数据可以用于项目计 划、估计、生产率和质量分析等..._过程能力基线
Kendo Ui Grid控件,继承至Widget。https://demos.telerik.com/kendo-ui/grid/index 快速上手教程 下面的代码来自本教程做表格时非常方便,具有非常强大的功能: <div id="grid"></div> <script> $(document).ready(..._kendogrid的作用
npm install cronvar cronJob = require('cron').CronJob;new cronJob('* * * * * *', function(){ console.log('You will see this message every second');}, null, true, "America/Los_Angeles");
501div.3A. Points in Segmentstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given a set of nsegments on the axis Ox,...
1.说明本文主要讲解如何使用Spring Boot快速搭建Web框架,结合Spring Data 和 Jest 快速实现对阿里云ElasticSearch的全文检索功能。主要使用组件:Spring Boot Starter:可以帮助我们快速的搭建spring mvc 环境Jest:一种rest访问es的客户端elasticsearch:全文检索spri..._org.elasticsearch.common.settings.settings#builder
项目之前是正常运行的,Xocde6中模拟器也mei_xcodexianzai
java连接 mysql数据库报这个错:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'jcloud.STORE_Ip' doesn"t exist把STORE_Ip改为小写就好了。 结论:在使用mysql数据库时,hibernate配置文件中table名用小写。 ...
51的精确延时_51单片机1微秒延时函数
本文简单介绍了PostgreSQL Locks(Table-Level)的基础知识,原文详见Postgres Locking Reve..._tuple-level locks
XHTML常用标签介绍互联网 发布时间:2008-10-17 18:57:18 作者:佚名 我要评论一段时间以来,发现有很多人XHTML都不会用,不光是普通的初学者,有的程序员都不是很清楚该怎么写这个XHTML,我这里呢算是把一些常见的应用问题做一个总结,也算能使得大家能在沟通,合作上能形成默契。XHTML里有很多的标签,但是经常用到的也就是那么几个,也只要掌握一段时间以来,发现有很..._html x