首页  >  文章  >  Java  >  迭代和修改ArrayList时如何避免ConcurrentModificationException?

迭代和修改ArrayList时如何避免ConcurrentModificationException?

Patricia Arquette
Patricia Arquette原创
2024-10-30 08:21:28735浏览

How to Avoid a ConcurrentModificationException When Iterating and Modifying an ArrayList?

当同时遍历(迭代)和修改 ArrayList 时,会发生 ConcurrentModificationException。本文探讨了处理此异常的最佳实践,概述了替代方法。

避免并发修改异常

为了防止发生异常,有两个选项可用:

  1. 创建要删除的值列表:迭代时,将需要删除的值添加到单独的列表中。迭代完成后,对原始列表调用“removeAll”方法。
  2. 使用Iterator的Remove方法:不要直接在循环内修改ArrayList,而是使用“remove”方法迭代器本身。这就需要使用传统的 for 循环,而不是增强的 for 循环。

Iterator 的移除方法示例:

考虑移除某个长度的字符串的场景ArrayList 中大于 5 的值:

<code class="java">List<String> list = new ArrayList<>();
...
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
    String value = iterator.next();
    if (value.length() > 5) {
        iterator.remove();
    }
}</code>

在此示例中,迭代器的“删除”方法用于在迭代原始列表时安全地修改原始列表。

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

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