黑马程序员技术交流社区

标题: 【长沙校区】ArrayList之迭代器源码解析 [打印本页]

作者: 长沙-小知姐姐    时间: 2018-12-28 15:38
标题: 【长沙校区】ArrayList之迭代器源码解析
本帖最后由 长沙-小知姐姐 于 2019-1-3 09:28 编辑



Java , 前端全网资源链接 : 【长沙校区】集合Java,前端所有基础入门,重点问题一览帖


ArrayList添加元素和迭代元素代码
代码:

结果:

传智黑马 酷丁鱼 传智专修学院

很显然,由于ArrayList是一个有序的集合,因此在迭代的时候保证了元素的存取顺序。那么,迭代器到底是怎么工作的呢?

迭代器源码:

图解:

总结;
1,ArrayList迭代元素主要是取决于Itr该类的next()方法
2,很多同学都以为一开始光标指向-1,这其实是不对的,一开始一定是指向0索引的位置。因为cursor是属于Itr该类的成员变量,所以默认值为0
3,没吃调用next()方法的时候,在next方法中都有一个局部变量为 i,而i的值都来至于成员变量 cursor的赋值
4,当i的值大于或者等于集合的长度的时候报错,NoSuchElementException();没有原始异常
5,当i的值大于等于copy过来数组的长度的时候报错,ConcurrentModificationException();并发修改异常
6,每次取元素使用的关键代码 return (E) elementData[lastRet = i]; lastRet为Itr的成员变量,每次都是由成员变量i对其赋值








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2