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.

posted @   allenwork  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示