首页  >  文章  >  Java  >  迭代集合时如何避免 ConcurrentModificationException?

迭代集合时如何避免 ConcurrentModificationException?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-23 20:23:12574浏览

How to Avoid ConcurrentModificationException When Iterating Through Collections?

并发修改异常

在处理集合时,可能会遇到ConcurrentModificationException,表明集合在迭代器中被修改使用。这对于调试来说可能是一个令人困惑的错误,特别是如果您在代码中没有看到任何明显的并发性。

考虑以下示例:

import java.util.*;

public class SomeClass {
    public static void main(String[] args) {
        List<String> s = new ArrayList<>();
        ListIterator<String> it = s.listIterator();

        for (String a : args)
            s.add(a);

        if (it.hasNext())
            String item = it.next();

        System.out.println(s);
    }
}

在此代码中,ConcurrentModificationException 是抛出,因为在创建迭代器但尚未使用列表 s 时,通过添加元素(使用 s.add())修改了列表 s。

To要解决此问题,您应该在列表完全填充后创建迭代器。这是代码的更正版本:

import java.util.*;

public class SomeClass {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();

        for (String a : args)
            s.add(a);

        ListIterator<String> it = s.listIterator();
        if (it.hasNext()) {
            String item = it.next();
        }

        System.out.println(s);
    }
}

此修改可确保在完全修改集合后创建和使用迭代器,从而防止任何并发问题。

以上是迭代集合时如何避免 ConcurrentModificationException?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn