打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java高级for循环使用remove/add 问题

今天在高级for循环中用了一下remove发现报错,写了个demo测试看:

此时代码是没有问题的,运行正常;但是把”1”.equals(temp)换成”2”.equals(temp)之后,问题就出来了!

报了这么一堆异常。

自己想了想画了个图:

看图就明白了,该list每当删除一个元素时,集合的size方法的值都会减小1,这将直接导致集合中元素的索引重新排序,进一步说,就是剩余所有元素的索引值都减1,正如上图所示,而for循环语句的局部变量i仍然在递增,这将导致删除操作发生跳跃。从而导致上述代码还有删除的问题。

所以不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁。如下:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
被问到List 如何一边遍历一边删除,该怎么回?教你 3 种方法
[Java拾遗]迭代list过程中删除元素
set在python里是什么意思
说说Python集合的那些事儿
JAVA中循环删除list中元素的方法总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服