关于foreach中集合添加元素报错ConcurrentModificationException
错误代码示例
1 | List<SubjectLabelBO> boList = new LinkedList<>(); |
在java中,循环中尝试向这个同一集合 boList
添加新的元素。由于 for-each
循环使用迭代器进行元素访问,当在循环中尝试修改这个集合时(如添加或删除元素),就会触发 ConcurrentModificationException
。
原因
当 for-each
循环开始时,它会为集合创建一个迭代器。这个迭代器有一个预期的修改计数,它与集合的修改计数同步。每当集合被修改(添加、删除元素等),其修改计数会增加。迭代器在每次迭代时都会检查这个计数,如果发现计数不符(即集合在迭代中被修改了),它就会抛出 ConcurrentModificationException
。这是迭代器的快速失败行为,目的是防止不确定的行为和潜在的错误。
解决办法
- 使用传统for循环
- 使用java8的stream API
- 使用ListIterator
- Post title:关于foreach中集合添加元素报错ConcurrentModificationException
- Post author:秋水
- Create time:2024-05-13 19:39:11
- Post link:tai769.github.io2024/05/13/关于foreach中集合添加元素报错/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.