关于【Java】for循环中List 删掉了其一导致的异常

public static void main(String[] args) {
        List<String> lists = new ArrayList<>();
        lists.add("1");
        lists.add("2");
        lists.add("3");
        lists.add("4");
        lists.add("5");
        for (String str : lists) {
            if (str.equals("4")) {
                lists.remove(str);
            }
        }
        System.out.println(lists);
    }

试想上述代码是否会报错?
思考点在list长度是5,然后在第4的时候,把序列4移除了,这时候序列5到了第四个位置,再去循环的时候会如何?

//ArrayList有一个这个方法:
//此方法用来判断创建迭代对象的时候List的modCount与现在List的modCount是否一样,不一样的话就报ConcurrentModificationException异常
        final void checkForComodification() {
            if (modCount != expectedModCount)
                throw new ConcurrentModificationException();
        }

如果是4删了,这时候之前list游标已经到最后了,他会认为这个顺序及长度是正常的,所以不会抛出异常了。
但是如果删掉的不是4,则每次游标校验的时候他会发现上面的值不相等了,因为通过remove把结构破坏了,导致不管是3,是5,还是其他,都会造成错误。所以上面用for来实现的方法不可取。
以上为个人见解。

        Iterator<String> iterator = lists.iterator();
        while (iterator.hasNext()) {
            String str = iterator.next();
            if (str.equals("1")) {
                iterator.remove();
            }
        }

解决方案如上。

//输出结果
[2, 3, 4, 5]

Process finished with exit code 0
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,223评论 1 118
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,131评论 0 10
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,792评论 0 9
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,947评论 0 5
  • 一个90后老阿姨的笑点世界,恶搞是我的绳命 🍆🍆🍆 【来哔哔】 我们女森一向都是口是心非的 怎么了你们有意见吗? ...
    素菜包阅读 4,531评论 7 9