Java常见问题:ConcurrentModificationException
问题描述在遍历集合如ArrayList、HashMap等的同时直接对集合进行结构性修改增、删会抛出ConcurrentModificationException。典型错误代码javaListString list new ArrayList(Arrays.asList(A, B, C)); for (String item : list) { if (B.equals(item)) { list.remove(item); // 抛出异常 } }解决思路1. 使用迭代器的remove()方法javaIteratorString iterator list.iterator(); while (iterator.hasNext()) { if (B.equals(iterator.next())) { iterator.remove(); // 安全删除 } }2. 使用普通 for 循环倒序遍历javafor (int i list.size() - 1; i 0; i--) { if (B.equals(list.get(i))) { list.remove(i); } }3. 使用removeIf()(Java 8)javalist.removeIf(B::equals);4. 收集要删除的元素遍历结束后再删除javaListString toRemove new ArrayList(); for (String item : list) { if (B.equals(item)) { toRemove.add(item); } } list.removeAll(toRemove);5. 使用并发集合多线程场景javaListString list new CopyOnWriteArrayList(Arrays.asList(A, B, C)); for (String item : list) { if (B.equals(item)) { list.remove(item); // 安全但注意性能 } }总结单线程优先使用Iterator.remove()或removeIf()多线程使用并发集合或加锁根本原因快速失败机制fail-fast—— 迭代时检测到集合被修改立即抛异常