美文网首页
简单聊聊list for循环的删除

简单聊聊list for循环的删除

作者: symop | 来源:发表于2017-11-08 17:31 被阅读0次
    简单聊聊list for循环的删除

    前几天有个同事问我为什么这样删除会报错,以前没注意过,现在简单聊聊。从报错的情况来看,猜测是这个增强版的for循环应该是被javac编译成迭代器了,于是用javap -verbose class路径,得到下图

    简单聊聊list for循环的删除

    果然是编译成了迭代器,这个所谓增强版的for循环只是个语法糖,下面来简单分析为什么报错,在增强版for循环中调用的是list删除而不是迭代器的删除。

    简单聊聊list for循环的删除

    请注意红色圈圈的变量,当增强版内部执行删除后,就会再次调用迭代器的next

    简单聊聊list for循环的删除 简单聊聊list for循环的删除

    因为删除没有调用迭代器的remove,导致expectedModCount没有变化,造成了modcount和expectedModCount不等,便抛出异常了,此时基本上已经解释增强版的for循环为什么报错的原因.接下来在聊聊RandomAccess,这个类的注释解释的很清楚,对于实现这个接口的类循环时用for比迭代器快,而对于arraylist也实现了这个类,当然用arraylist循环是不建议用迭代器和增强版的for循环。不过以前我用增强版for循环非常之多,汗颜呢。

    第一次写博客,写的不好之处多多包涵,共同学习,最后推荐个群阿里冯大神的群,群号码:397633380,希望能共同学习。

    相关文章

      网友评论

          本文标题:简单聊聊list for循环的删除

          本文链接:https://www.haomeiwen.com/subject/tiuymxtx.html