java基础知识点整理
为什么禁止在foreach循环里面进行元素的remove/add操作
foreach循环(增强for循环)
-
增强for循环,其实是依赖了Iterator实现的。
-
运行结果抛出ConcurrentModificationException,同样的,如果尝试在foreach中添加一个元素也会抛同样的错误。
-
之所以会出现这个异常,是因为出发了一个Java集合的错误检查机制:fail-fast。
foreach循环的实质
-
使用了 Iterator 对象进行遍历
String s; for(Iterator iterator = list.iterator(); iterator.hasNext(); System.out.println(s)) s = (String)iterator.next();
-
如果对集合对象进行修改/删除,那么集合对象的 modCount 会进行加1,而Iterator对象的 expectedModCount 不会发生改变
-
checkForComodification方法校验会报错
final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); }
建议
以上几种方式都可以避免触发fail-fast机制,避免抛出异常。如果是并发场景,建议使用concurrent包中的容器;
如果是单线程场景,Java8之前的代码中建议使用Iterator进行元素删除/添加;Java8之后可以考虑使用Stream及filter.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix