解决:java.util.ConcurrentModificationException: null:异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了解决:java.util.ConcurrentModificationException: null:异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2327字,纯文字阅读大概需要4分钟。
内容图文
![解决:java.util.ConcurrentModificationException: null:异常](/upload/InfoBanner/zyjiaocheng/820/24a6b8dc5abf4663a7519e4e65616136.jpg)
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
list.add("ee");
list.add("ff");
list.add("gg");
list.add("hh");
list.add("kk");
list.add("yy");
list.add("oo");
list.forEach(s -> {
list.add("tt");
});
}
}
当我们迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素),可能会抛出java.util.ConcurrentModificationException的异常。
Exception in thread "main" java.util.ConcurrentModificationException
? ? at java.util.ArrayList.forEach(ArrayList.java:1260)
? ? at com.hzt.tool.Test.main(Test.java:28)
ArrayList的父类AbstarctList中有一个域modCount,每次对集合进行修改(增添元素,删除元素……)时都会modCount++ 而foreach的背后实现原理其实就是Iterator(关于Iterator可以看Java Design Pattern: Iterator),等同于注释部分代码。在这里,迭代ArrayList的Iterator中有一个变量expectedModCount,该变量会初始化和modCount相等,但如果接下来如果集合进行修改modCount改变,就会造成expectedModCount!=modCount,此时就会抛出java.util.ConcurrentModificationException异常
新增源码如下
? ? /**
? ? ?* Inserts the specified element at the specified position in this
? ? ?* list. Shifts the element currently at that position (if any) and
? ? ?* any subsequent elements to the right (adds one to their indices).
? ? ?*
? ? ?* @param index index at which the specified element is to be inserted
? ? ?* @param element element to be inserted
? ? ?* @throws IndexOutOfBoundsException {@inheritDoc}
? ? ?*/
? ? public void add(int index, E element) {
? ? ? ? rangeCheckForAdd(index);
? ? ? ? ensureCapacityInternal(size + 1); ?// Increments modCount!!
? ? ? ? System.arraycopy(elementData, index, elementData, index + 1,
? ? ? ? ? ? ? ? ? ? ? ? ?size - index);
? ? ? ? elementData[index] = element;
? ? ? ? size++;
? ? }
? ?private void ensureCapacityInternal(int minCapacity) {
? ? ? ? ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
? ? }
? ? private void ensureExplicitCapacity(int minCapacity) {
? ? ? ? modCount++;
? ? ? ? // overflow-conscious code
? ? ? ? if (minCapacity - elementData.length > 0)
? ? ? ? ? ? grow(minCapacity);
? ? }
说明modCount++ 此时expectedModCount!=modCount 报错 我的解决办法就是
for (int i = 0; i < list.size(); i++) {
? ? ? ? ? ? list.add("tt");
}
转载自我的博客https://www.51csdn.cn/article/370.html
内容总结
以上是互联网集市为您收集整理的解决:java.util.ConcurrentModificationException: null:异常全部内容,希望文章能够帮你解决解决:java.util.ConcurrentModificationException: null:异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。