集合框架_并发修改异常的产生原因及解决方案

来源:互联网 发布:unknown网络 编辑:程序博客网 时间:2024/06/05 16:04
package cn.itcast_04;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;/* * 问题? * 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"android"元素,请写代码实现。 *  * ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 * 产生的原因: * 迭代器是依赖于集合而存在的,在判断成功后,集合中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。 * 其实这下问题描述的是:迭代器遍历元素的进候,通过集合是不能修改元素的。 * 如何解决呢? * A:迭代器迭代元素,迭代器修改元素。 * 元素是跟在迭代的元素的后面的。 * B:集合遍历元素,修合修改元素(普通for)。 * 元素在最后添加的。 */public class ListIteratorDemo2 {public static void main(String[] args) {// 创建集合对象List list = new ArrayList();// 添加元素list.add("hello");list.add("world");list.add("java");// 迭代器遍历// list.add(list.indexOf("world"), "android");// Iterator it = list.iterator();// while (it.hasNext()) {// String s = (String) it.next();// if ("world".equals(s)) {// list.add("android");// }// }// 方式1:迭代器迭代元素,迭代器修改元素。// 而Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator// ListIterator lit = list.listIterator();// while(lit.hasNext()){// String s = (String) lit.next();// if("world".equals(s)){// lit.add("android");// }// }// 集合遍历元素,修合修改元素(普通for)。for(int x = 0;x<list.size();x++){String s = (String) list.get(x);if("world".equals(s)){list.add("android");}}System.out.println("list: " + list);}}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 外墙保温层坏了怎么办 双胞胎34周血压高怎么办 夏天穿凉鞋脚后跟干裂起硬皮怎么办 穿凉鞋脚后跟干裂起硬皮怎么办 夏天穿凉鞋磨脚怎么办 lv皮带黑色掉漆怎么办 黑色衣服穿在身上掉色怎么办 电信卡流量超了怎么办 移动卡流量超了怎么办 狗狗老是挠痒痒怎么办 出差同住的同事睡觉打鼾怎么办 小孩皮肤太黑了怎么办 苹果平板突然黑屏打不开怎么办 孩子认人晚上哭怎么办 主腹动脉有硬块怎么办 糖链抗原125偏高怎么办 狗长了个肿瘤怎么办 腺肌瘤糖类抗原125升高怎么办 糖类抗原724单项升高怎么办? 化疗期间糖类抗原升高怎么办? 门面租客到期不搬怎么办 这几天老想初恋怎么办 结婚了还想初恋怎么办 九年了想初恋了怎么办 吃肥肉恶心想吐怎么办 宝宝吃了母乳不吃奶粉怎么办 母猫的奶少怎么办 鲤鱼打挺起不来怎么办 练不会鲤鱼打挺怎么办 鲤鱼打挺脖子痛怎么办 新买的沙发太高怎么办 额最后离开公司没人关灯怎么办 看到我妹妹就烦怎么办 野塘钓鱼不开口怎么办 团关系找不到接收地怎么办 两岁宝宝就是不肯说话怎么办 两岁宝宝不肯吃药怎么办 并蹄莲叶子大黄怎么办 异地恋见面来大姨妈怎么办 奶水太多宝宝老是呛到怎么办 奶水太多吃奶婴儿呛怎么办