集合框架(并发修改异常的产生原因及其解决方案)
来源:互联网 发布:pdf转ppt软件在线 编辑:程序博客网 时间:2024/06/07 08:23
一、
假如我有一个集合,如下:我想判断里面有没有"化学老师"这个元素,如果有,我就添加一个"哈哈"元素,请写代码实现
import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ListIteratorDemo {public static void main(String[] args) {//创建list对象List list = new ArrayList();//添加元素list.add("王俊凯");list.add("我是你");list.add("化学老师");Iterator it = list.iterator();while(it.hasNext()){String s = (String)it.next();if("化学老师".equals(s)){list.add("哈哈哈");}System.out.println(s);}}}
会发现这个里报错了:java.util.ConcurrentModificationException ,然后我们这时候需要查看这个到底是什么错误
经过查看,可知:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常;
产生原因:迭代器是依赖于集合而存在的,在判断成功后,集合中添加了新元素,而迭代器却不知道,所以就报错了,这个错误就叫做并发修改异常
简单来说:迭代器遍历元素的时候,通过集合是不能修改元素的
那么如何解决呢:
A:迭代器迭代元素,迭代器修改元素
元素是跟在刚才迭代的元素后面的;
B:集合遍历元素,集合修改元素(普通的for遍历)
元素在最后添加;
A情况代码如下
(方式A:迭代器没有添加功能,所以我们使用其子接口ListIterator)
import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;public class ListIteratorDemo {public static void main(String[] args) {//创建list对象List list = new ArrayList();//添加元素list.add("王俊凯");list.add("我是你");list.add("化学老师");//遍历添加前System.out.println(list+"----------");ListIterator lst = list.listIterator();while(lst.hasNext()){String s = (String)lst.next();if("我是你".equals(s)){lst.add("哈哈哈");}}System.out.println(list);}}
Console:
[王俊凯, 我是你, 化学老师]----------
[王俊凯, 我是你, 哈哈哈, 化学老师]
注意这里的哈哈哈位置,然后再看下面集合的修改方法
B情况如下
import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;public class ListIteratorDemo {public static void main(String[] args) {//创建list对象List list = new ArrayList();//添加元素list.add("王俊凯");list.add("我是你");list.add("化学老师");//遍历添加前System.out.println(list+"----------");for(int i =0;i<list.size();i++){String s = (String)list.get(i);if("我是你".equals(s)){list.add("好好学习");}}System.out.println(list);}}
Console:
[王俊凯, 我是你, 化学老师, 好好学习]
好了,以上就是并发修改异常的产生原因及其解决方案。 所以尽可能用B方法也就是集合遍历元素,集合添加元素
阅读全文
0 0
- 集合框架(并发修改异常的产生原因及其解决方案)
- 集合框架_并发修改异常的产生原因及解决方案
- 黑马程序员-java基础-并发修改异常产生的原因和解决方案
- Java_基础—并发修改异常产生的原因及解决方案
- java语言基础(66)——集合框架(arrayList ConcurrentModificationException 并发修改异常的解决方案)
- 并发修改异常的产生原因及解决方法
- ConcurrentModificationExeception :并发修改异常产生原因及解决方法
- 在Iterator时所产生的并发修改异常问题
- 【Oracle】Oracle预定义的几种系统异常及其产生原因
- org.springframework.beans.factory.BeanCreationException异常产生的原因和解决方案
- org.springframework.beans.factory.BeanCreationException异常产生的原因和解决方案
- Spring读取配置文件org.springframework.beans.factory.BeanCreationException异常产生的原因和解决方案
- Android内存泄漏产生的原因以及解决方案(OOM)
- Android内存泄漏产生的原因以及解决方案(OOM)
- Linux内核产生并发的原因
- 高并发update的 死锁产生原因
- 邮件乱码产生的原因及其分析
- ANR产生的原因及其定位分析
- 饭卡 (背包问题 动态规划)
- 二进制文件格式设计
- python中的集合set
- Gson解析Json数据(一)单类型格式
- (转)为Java说句公道话
- 集合框架(并发修改异常的产生原因及其解决方案)
- 花生壳内网穿透-ssh远程
- 对象实例化过程分析
- 洛谷P1547 Out of Hay
- allocation类(空间配置类)
- python中字符串与字节转换
- The Process Of PCI
- 《最优控制问题的Legendre伪谱法求解及其应用_徐少兵》的仿真结果
- 百炼-1321-棋盘问题-C语言-递归算法