java.util.ConcurrentModification…
来源:互联网 发布:js只能输入以-数字开头 编辑:程序博客网 时间:2024/06/05 11:30
错误代码:
public static void main(String[] args) {
抛出异常:
java.util.ConcurrentModificationEx
原因:
在内部类Itr中,有一个字段expectedModCount ,初始化
时等于modCount,即当我们调用list.iterator()返回迭代器时,该字段被初始化为等于modCount。在类Itr中next/remove方法都有调用checkForComodification()方法,在该方法中检测modCount==expectedModCount,如果不相当则抛出异常ConcurrentModificationEx
前面说过,在集合的修改操作(add/remove)中,都对modCount操作了。
在看看刚开始提出的那段代码,在迭代过程中,执行list.remove(val),使得modCount+1,当下一次循环时,执行it.next(),checkForComodification方法发现modCount !=expectedModCount,则抛出异常。
解决办法:
如果想要在迭代的过程中,执行删除元素操作怎么办?
再来看看内部类Itr的remove()方法,在删除元素后,有这么一句expectedModCount =modCount,同步修改expectedModCount的值。所以,如果需要在使用迭代器迭代时,删除元素,可以使用迭代器提供的remove方法。对于add操作,则在整个迭代器迭代过程中是不允许的。其他集合(Map/Set)使用迭代器迭代也是一样。
- java.util.ConcurrentModification…
- java.util.ConcurrentModification…
- Java缓存使用ArrayList/HashMap的常见问题----ConcurrentModification
- java.util.regex.PatternSyntaxExc…
- NavigableMap(java.util.concurre…
- java.util
- java.util
- java.util
- JAVA UTIL
- java.util
- java.util
- java.util.*
- java.util
- java util
- java util
- java.util
- java.util
- Java - java.util.Iterator
- oracle日期函数大全一(Date)
- oracle日期函数二(timestamp)
- 数据库选择编码方式(GBK、UTF-8)
- 最简单的timestamp转date
- 一句话证明你是程序员
- java.util.ConcurrentModification…
- hibernate实体类配置详解
- Oracle的SQL语句中如何处理‘&’…
- 获取中文配置文件
- js line
- 连接oracle数据库出现oracle …
- 博客十年,感谢有你!
- 查询两个日期之间每一天日期
- JSTL 获取参数