java语言基础(66)——集合框架(arrayList ConcurrentModificationException 并发修改异常的解决方案)
来源:互联网 发布:淘宝网店转让合法吗 编辑:程序博客网 时间:2024/06/06 09:16
问题重现:
package ArrayListDemo;import java.util.ArrayList;import java.util.Iterator;public class ArrayListDemo {/** * @param args */public static void main(String[] args) { ArrayList ls = new ArrayList();ls.add("hello");ls.add("world");ls.add("java");Iterator it = ls.iterator();while(it.hasNext()){String s = (String)it.next();if(s.equals("world")){ls.add("hello");}}}}如上所述,在iterator遍历的ArrayList的同时,向集合中添加元素 hello ,会抛出并发修改异常ConcurrentModificationException,是因为迭代器 it 和 集合对象ls 同时操作 arrayList。
解决方案:
从字面意思我们可以猜到,既然是并发修改异常,肯定是发生了并发修改,那么我们可以避免并发修改,就可以避免异常了。
package ArrayListDemo;import java.util.ArrayList;import java.util.ListIterator;public class ArrayListDemo {/** * @param args */public static void main(String[] args) { ArrayList ls = new ArrayList();ls.add("hello");ls.add("world");ls.add("java");//Iterator it = ls.iterator();//while(it.hasNext()){//String s = (String)it.next();//if(s.equals("world")){//ls.add("hello");//}//}// 解决方案1// 迭代器遍历,迭代器修改//ListIterator lit = ls.listIterator();//while(lit.hasNext()){//String s = (String)lit.next();//if(s.equals("world")){//lit.add("hello");//}////}//System.out.println(ls.toString());//[hello, world, hello, java] 添加成功// 解决方案2// 集合遍历,集合修改(普通for循环)int len = ls.size();for(int i = 0;i<len;i++){if(ls.get(i).equals("world")){ls.add("hello");}}System.out.println(ls.toString());// [hello, world, java, hello] 添加成功 但是元素在最后}}
阅读全文
0 0
- java语言基础(66)——集合框架(arrayList ConcurrentModificationException 并发修改异常的解决方案)
- 黑马程序员——集合中并发修改异常ConcurrentModificationException
- ArrayList删除元素并发异常ConcurrentModificationException解决方案
- java.util.ConcurrentModificationException ,遍历集合并同时修改集合,并发造成的异常解决办法
- Java集合之ConcurrentModificationException(并发修改异常)分析
- Java并发修改异常ConcurrentModificationException
- JAVA ConcurrentModificationException并发修改异常
- 关于迭代器的在集合遍历中发生的并发修改异常(java.util.ConcurrentModificationException
- 深入分析集合并发修改异常(源码分析)java.util.ConcurrentModificationException
- 【Java源码分析】ConcurrentModificationException并发修改异常分析与解决方案(快速失败与安全失败)
- 集合框架(并发修改异常的产生原因及其解决方案)
- 关于java集合的遍历以及ConcurrentModificationException(并发操作异常)
- ConcurrentModificationException并发修改异常
- ConcurrentModificationException并发修改异常
- java.util.ConcurrentModificationException:并发修改异常!
- java.util.ConcurrentModificationException 并发修改异常处理
- Java ArrayList异常-ConcurrentModificationException
- ConcurrentModificationException:并发的修改错误(常见于集合)
- 你或许不了解的C++函数调用
- java培训第三天
- 【Leetcode】Decode Ways 解码方式
- 主题六 函数(C语言核心)----37.函数递归详解
- 读王垠博文有感
- java语言基础(66)——集合框架(arrayList ConcurrentModificationException 并发修改异常的解决方案)
- MVC下拉控件绑定数据
- 子进程的异步等待方式
- 内核启动分析
- Hbase之表的设计
- iOS学习笔记-078.核心动画04——CATransition(转场动画)
- mongoDB-pymongo-入门
- C++primer-1
- 值得收藏的50个学习C语言的源代码网站