不要在 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,如需转载请自行联系原作者




相关文章
|
SQL 缓存 Oracle
为什么阿里巴巴禁止使用 count(列名)或 count(常量)来替代 count(*)
本文介绍了COUNT函数的用法,主要用于统计表行数。主要用法有COUNT(*)、COUNT(字段)和COUNT(1)。
12529 0
为什么阿里巴巴禁止使用 count(列名)或 count(常量)来替代 count(*)
|
Java 数据库连接 mybatis
Mybatis Plus保存数据返回主键id
Mybatis Plus保存数据返回主键id
532 1
|
缓存 算法
07、Netty学习笔记—(聊天业务优化:参数调优)(二)
07、Netty学习笔记—(聊天业务优化:参数调优)(二)
07、Netty学习笔记—(聊天业务优化:参数调优)(二)
|
Docker 容器
docker 设置国内镜像源
docker 设置国内镜像源
86369 1
|
存储 缓存 Java
Java中的延时队列(Delay Queue)
Java中的延时队列(Delay Queue)
492 3
|
Java Spring
在Spring Boot中,可以通过控制`@PostConstruct`注解方法的执行顺序来实现初始化时的顺序控制
在Spring Boot中,可以通过控制`@PostConstruct`注解方法的执行顺序来实现初始化时的顺序控制
991 1
|
Java Apache 开发者
介绍BeanUtils.copyProperties方法
介绍BeanUtils.copyProperties方法
|
负载均衡 Java Spring
Spring Cloud实战小贴士:Ribbon的饥饿加载(eager-load)模式
Spring Cloud实战小贴士:Ribbon的饥饿加载(eager-load)模式
768 0
|
开发工具 git
git 强制更新远程分支覆盖本地分支
git fetch --all git reset --hard origin/分支名称 git pull
770 0