集合类常见报错源于运行时逻辑冲突,主要为遍历时修改结构触发ConcurrentModificationException、索引越界抛IndexOutOfBoundsException、类型不匹配;解决需理解设计契约,如用迭代器remove()、校验索引范围、使用线程安全集合。

集合类常见报错,多数不是语法错误,而是运行时逻辑冲突。核心问题集中在三类:遍历时修改结构、索引越界、类型不匹配。解决关键不是“绕开”,而是理解集合的设计契约。
遍历中修改集合导致ConcurrentModificationException
增强型for循环或普通Iterator遍历时,直接调用list.remove()、map.put()等方法会触发该异常。这是因为Java集合采用fail-fast机制,通过modCount字段检测结构变更。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 单线程场景:改用迭代器的remove()方法,它会同步更新modCount
- 需要边遍历边增删多个元素:先收集待操作项(如List
toRemove),遍历结束后统一处理 - 多线程共享集合:换成CopyOnWriteArrayList或ConcurrentHashMap,它们内部已做线程安全设计
访问索引超出范围抛IndexOutOfBoundsException
ArrayList.get(i)、Arrays.asList().get(i)等操作,索引i必须满足0 ≤ i 。常见于用户输入未校验、循环边界写错(比如用
集合的contains(Object)、remove(Object)等方法参数是Object,编译期不检查类型。传入Integer去查Short类型列表,永远返回false,不报错但逻辑出错。 Collections.singletonList()、List.of()、map.keySet()等返回的集合默认不可增删,调用add()、remove()会立即抛异常。
contains/remove传入错误类型静默失败
误操作不可变集合抛UnsupportedOperationException










