ArrayList集合为什么不能使用foreach增加、删除、修改元素翩跹丽人行,广漠传播,机械迷城五子棋攻略,天使计划ol,甄fu宓,3u8657,撕掉她的外衣,黄润美,北大校花陈菁菁,操控飞船起飞,唐吉可德多弗拉明戈,暗黑3魔盒,华特吧,重生之以父之名,工口动漫,靠靠墙,空间宝,将来的歌伴奏,重生之欧美纵横,张姝妮,褪色的巫师帽,轩辕伏魔录血魄石,蒋清军,女子被偷抱怨路人,独臂快递哥欠房贷,蓝火球,loctiteletai,智在瑞,少城时代ceo,暖床冷奴,手贱暖羊羊,空想王,花开花谢花满天,异界之中华古武,武林风康恩,风流小医仙,孔菁苹,重生之一品庶女,免费三级域名,英雄联盟我的时代,提尔之手,190852213,无讼案例,雅贝奇,喋血边缘qvod,洛丝维亚瑟,下马威伤湿止痛膏,www.fushufen.com.cn,福氏耐格里变形虫,合欢蜂胶,暗黑之死灵道士,mellow高敏爱,海底宝藏2,股民人均亏超2万,邹市明的妻子,除魔战士,遥远的她萧正楠,大唐之枭雄天下,绵阳新闻,林粮乩,圣尊修行录,健康养生堂,孙玙倩,剑道真解,逆之魔魂,脂老虎官方代理正娘孙景泉,唐语涵,三国第一鬼才,人参娘二区吧,coaroo,植发加微信moka818,土城布衣,无敌流浪汉5无敌版,葫芦小金刚全集播放,杜夏娟,数学备课大师,薇丝露,萌幻之乡acg,死木港,七六六忘忧小说网,常州化工库房起火,夺舍在星际,一口气甩干,白马非马简谱,冥界傲君,冯天魁简历,剑噬天下txt全集下载,填房娘子,又名庄河站长网,美设门,黄柏宇,烈火龙泉,夏夜攻防战,绝品透视 小妖 小说,曾伟权老婆,俞恬声,方宏进简历,李姐的混蛋超能力世界,兰州大学网络电视,惊天世界, 开元棋牌游戏的真假_安卓开元棋牌_开元棋牌赢钱规律

ArrayList集合为什么不能使用foreach增加、删除、修改元素

   信息来源:KNgkdxnmp

编程过程中常常需要使用到集合,而ArrayList也是我们常常使用的,但是最近在一次删除和增加中出现了一些问题,分享记录下。

请看下面两段代码,哪段代码会报错呢,或者都成功呢。List arrayList1 = new ArrayList();

arrayList1.add("1");

arrayList1.add("2");

for (String s : arrayList1) {

if("1".equals(s)){

arrayList1.remove(s);

}

}

List arrayList2 = new ArrayList();

arrayList2.add("2");

arrayList2.add("1");

for (String s : arrayList2) {

if("1".equals(s)){

arrayList2.remove(s);

}

}

程序运行结果如下:arrayList1的remove方法成功执行,但是arrayList2的remove方法运行抛出ConcurrentModificationException异常。

为了寻找原因,我们只能看源代码了。

因为foreach的本质就是使用的迭代器Iterator,所有的Collection集合类都会实现Iterable接口。

找到ArrayList类的iterator()方法

使用自己的Itr内部类,并且实现了Iterator接口

迭代器的本质是先调用hasNext()方法判断存不存在下一个元素,然后再使用next()方法取下一个元素

Itr内部类实现上面arraylist1为什么能remove成功呢,其实它只循环了一次,所以成功了。

因为它在remove元素1之后,它的size - 1变成1,然后Itr内部的cursor变量由0变成1

此时1 = 1,循环结束,所以成功了。

arraylist2为什么remove失败呢,因为他在循环第二次的时候,也remove成功了,但是第三次判断next的时候cursor的值为2导致不等于现在的size 1,所以执行了next方法,最重要的来了,之前remove的操作导致ArrayList的modCount值加1,然后Itr类中的expectedModCount保持不变,所以会抛出异常。

同理可得,由于add操作也会导致modCount自增,所以不允许在foreach中删除、增加、修改ArrayList中的元素。

对此,推荐大家使用迭代器Iterator删除元素,Iterator iterator = arrayList2.iterator();

while(iterator.hasNext()){

String item = iterator.next();

if("1".equals(item)){

iterator.remove();

}

}

如果存在并发操作,还需要对Iterator进行加锁操作。

如果大家有更好的方式,或者文中有错误的地方,还望批评指正


翩跹丽人行,广漠传播,机械迷城五子棋攻略,天使计划ol,甄fu宓,3u8657,撕掉她的外衣,黄润美,北大校花陈菁菁,操控飞船起飞,唐吉可德多弗拉明戈,暗黑3魔盒,华特吧,重生之以父之名,工口动漫,靠靠墙,空间宝,将来的歌伴奏,重生之欧美纵横,张姝妮,褪色的巫师帽,轩辕伏魔录血魄石,蒋清军,女子被偷抱怨路人,独臂快递哥欠房贷,蓝火球,loctiteletai,智在瑞,少城时代ceo,暖床冷奴,手贱暖羊羊,空想王,花开花谢花满天,异界之中华古武,武林风康恩,风流小医仙,孔菁苹,重生之一品庶女,免费三级域名,英雄联盟我的时代,提尔之手,190852213,无讼案例,雅贝奇,喋血边缘qvod,洛丝维亚瑟,下马威伤湿止痛膏,www.fushufen.com.cn,福氏耐格里变形虫,合欢蜂胶,暗黑之死灵道士,mellow高敏爱,海底宝藏2,股民人均亏超2万,邹市明的妻子,除魔战士,遥远的她萧正楠,大唐之枭雄天下,绵阳新闻,林粮乩,圣尊修行录,健康养生堂,孙玙倩,剑道真解,逆之魔魂,脂老虎官方代理正娘孙景泉,唐语涵,三国第一鬼才,人参娘二区吧,coaroo,植发加微信moka818,土城布衣,无敌流浪汉5无敌版,葫芦小金刚全集播放,杜夏娟,数学备课大师,薇丝露,萌幻之乡acg,死木港,七六六忘忧小说网,常州化工库房起火,夺舍在星际,一口气甩干,白马非马简谱,冥界傲君,冯天魁简历,剑噬天下txt全集下载,填房娘子,又名庄河站长网,美设门,黄柏宇,烈火龙泉,夏夜攻防战,绝品透视 小妖 小说,曾伟权老婆,俞恬声,方宏进简历,李姐的混蛋超能力世界,兰州大学网络电视,惊天世界,

生辰八字起名字 http://www.bbqmw.net/qm_scbzqmz/
蜘蛛池