for和迭代器

for和迭代器

我问下for既然底层是迭代器并且课程凑巧删除的最后一个元素,那么按照上个课讲解此时迭代器都到最后了,为什么下一个for还可以输出数据而不报空(因为前一个for到最后此时应该没有数据了)

相关截图:

620bb21128e448ad05001000.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-02-16 09:40:06

同学你好,迭代器抛出异常的底层原理不是根据是否还有元素进行判断的,而是根据一个变量的值进行判断的。在迭代器底层维护了一个名为modCount的int型变量,每当有增或删的操作时,这个值都会自增1。迭代器每次进行迭代时,都会将modCount的值进行校验,如果这个值和最初不符,说明集合进行过增或者删的操作,则抛出异常。课程中由于是最后一个元素,此时迭代器返回元素之后已经停止工作,此时即使modCount的值与原本不同了,迭代器也不会作出反应。

祝学习愉快~


  • 提问者 胖胖的工程师 #1

    我不是问为什么抛出异常,我是问第二个for为什么输出数据,因为前一个for已经把数据迭代完了按理说此时应该到最后没数据可以输出了

    2022-02-16 11:48:38
  • 同学你好,虽然forEach底层使用了迭代器,但是forEach底层每次在开始迭代的时候都会重新调用一次方法生成新的迭代器对象,而非在原来的迭代器上再次操作。

    祝学习愉快~


    2022-02-16 13:44:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师