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

public static void main(String[] args) {
        List 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 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

你可能感兴趣的:(关于【Java】for循环中List 删掉了其一导致的异常)