迭代器
迭代器的源码,以及两个经典方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sn6VAVqF-1637924287656)(javaSE.assets/image-20210705083946078.png)]](https://i-blog.csdnimg.cn/blog_migrate/64ecb2a25d3c7cc3c7016203f88ce976.png)
面试题:迭代器对应的关系
hashnext与next方法的具体实现
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a06kK50K-1637924287658)(javaSE.assets/image-20210705085054997.png)]](https://i-blog.csdnimg.cn/blog_migrate/437d54b39091f80fafc4177957110e5d.png)
增强for循环起始底层也是用迭代器完成的
用debug查看增强for循环,会发现,执行的下一步还是会进到iterator里
listirerator
加入字符串,比如我们想想要在代码中遍历到cc后新增一个kk
List list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
list.add("ee");
Iterator iterator = list.iterator();
while (iterator.hasNext()){
if ("cc".equals(iterator.next())){
list.add("kk");
}
}
控制台发生并发修改异常
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cOQNCyOE-1637924287659)(javaSE.assets/image-20210705085750320.png)]](https://i-blog.csdnimg.cn/blog_migrate/451c725f97ccca4ae3669d8e00ddfc2e.png)
出错原因:
迭代器和lsit同时操作集合,
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nYg8tUQl-1637924287660)(javaSE.assets/image-20210705085914271.png)]](https://i-blog.csdnimg.cn/blog_migrate/a48e0db46a956ba5acf1156f66e832d9.png)
如何解决:事情让一个迭代器做,新迭代器:listiterator,迭代和添加操作都用listiterator来操作
ListIterator iterator = list.listIterator();
while (iterator.hasNext()){
if ("cc".equals(iterator.next())){
iterator.add("kk");
}
}
本文深入探讨了Java中的迭代器工作原理,包括`hasNext`和`next`方法的实现。在面试中,迭代器常常与增强型for循环联系在一起,因为后者在底层也是通过迭代器实现的。示例代码展示了在遍历列表并尝试在特定条件下添加元素时遇到的并发修改异常。问题的关键在于,同时使用迭代器和集合进行修改会导致此异常。为了解决这个问题,引入了`ListIterator`,它允许在迭代过程中添加元素,如`iterator.add(kk)`所示。这个例子解释了如何避免并发修改异常,确保操作的正确性。
64

被折叠的 条评论
为什么被折叠?



