不要在 foreach 循环里进行元素的 remove / add 操作-阿里云开发者社区

开发者社区> 技术小胖子> 正文

不要在 foreach 循环里进行元素的 remove / add 操作

简介:
+关注继续查看

在foreach 循环里面,不能用remove方法,因为当list里面的最后一个元素被remove时候,会报错。

摘自《阿里巴巴Java开发手册》

【强制】不要在 foreach 循环里进行元素的 remove / add 操作。 remove 元素请使用 Iterator

方式,如果并发操作,需要对 Iterator 对象加锁。

反例:

List<String> a = new ArrayList<String>();

a.add("1");

a.add("2");

for (String temp : a) {

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

    a.remove(temp);

}

}

说明:以上代码的执行结果肯定会出乎大家的意料,那么试一下把“1”换成“2”,会是同样的

结果吗?

正例:

Iterator<String> it = a.iterator();

while(it.hasNext()){

String temp = it.next();

if(删除元素的条件){

    it.remove();

}

}




      本文转自建波李 51CTO博客,原文链接:http://blog.51cto.com/jianboli/1971180,如需转载请自行联系原作者




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ThreadPool执行异步操作
使用ThreadPool_类执行异步任务 /* ThreadPool 类是一个静态类型类,使用ThreadPool 类执行异步时通常调用ThreadPool 的 QueueUserWorkItem 方法,这个方法有一个重载版本,如下: public static bool ...
863 0
Linux文本模式下录制、回放和共享操作记录(script、scriptreplay、mkfifo)的妙用
在生产中,有时候需要把别人的操作过程录制下来,后期可以进行回放查看。还可以实时共享自己的操作,让另一个人在千里之外指导你进行操作。
2583 0
CSS-自定义高度的元素背景图如何自适应以及after伪类在ie下的处理
我都好久没更新了! 遇到一个效果,之前没有考虑清楚,设置了固定高度,到了后边,产品要加长,我就觉得设计得从新弄张长点的背景图!这不多余么? 其实分析原图还是可以再切分,再细化到不用改设计图,让我们前端页面各种适应,做到重复利用。
874 0
Tomcat集群配置元素Receiver属性(一)
Tomcat集群配置元素Receiver属性(一)      属性:className、含义:该Receiver实现要使用的完全限定的Java类名。对Tomcat 6.0。有可供使用的两个类:org.apache.catalina.tribes.transport.bio.BioReceiver和org.apache.catalina.tribes.transport.nio.NioReceiver    属性:address、含义:监听人向复制消息的IP地址或完全限定主机名的IP地址。
579 0
LeetCode 82 Remove Duplicates from Sorted List II(从已排序链表中移除重复元素)(Linked List)(*)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/52186216 翻译 给定一个已排序链表,删除所有的重复节点,只保留原始链表中独特的数字。
743 0
Tomcat集群配置元素Receiver
Tomcat集群配置元素Receiver      该元素嵌套在元素中,配置该节点如何从集群的其他节点中接收复制数据。      该Receiver从其他节点的Sender上接收复制消息。
567 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载