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

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

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

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

  2. 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作

    在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 foreach循环 foreach循环(Foreach loop)是计算机编程 ...

  3. 【Java开发规范】禁止在 foreach 循环里进行元素的 remove/add 操作

    在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. foreach循环 Foreach循环(Foreach loop)是计算机编程语言 ...

  4. java foreach 删除_为什么java不要在foreach循环里进行元素的remove/add操作

    首先,这涉及多线程操作,Iterator是不支持多线程操作的,List类会在内部维护一个modCount的变量,用来记录修改次数 举例:ArrayList源码 protected transient ...

  5. java不进入for_为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作?...

    在阅读<阿里巴巴Java开发手册>时,发现有一条关于在 foreach 循环里进行元素的 remove/add 操作的规约,具体内容如下: 错误演示 我们首先在 IDEA 中编写一个在 f ...

  6. 为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作...

    在阅读<阿里巴巴 Java 开发手册>时,发现有一条关于在 foreach 循环里进行元素的 remove/add 操作的规约,具体内容如下:"不要在foreach循环里进行 r ...

  7. 使用foreach循环遍历集合元素

    使用foreach循环遍历集合元素 Java5.0 提供了foreach循环迭代访问Collection和数组 遍历操作不需要获取Collection或数组的长度,无需使用索引访问元素 遍历集合的底层 ...

  8. php foreach 单箭头,PHP Foreach循环具有单个元素

    我有一个函数来解析嵌套数组中的"条目": $data = Array( [date] => 'date' [entry] => Array( [0] => Arr ...

  9. Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin

    1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...

最新文章

  1. STM32开发 -- UTC、UNIX时间戳、北京时间之间的转换
  2. 黑龙江大学计算机调剂信息,黑龙江大学各学院2019考研调剂信息汇总(4月1日)
  3. 最短路径次短路径算法
  4. 由浅入深CIL系列:5.抛砖引玉:判断string是否为空的四种方法的CIL代码看看效率如何?...
  5. 基于嵌入式操作系统VxWorks的多任务并发程序设计(5)――中断与任务
  6. 如何吧家庭网络从计算机去掉,3个简单电脑、路由器设置,迅速解决网络瓶颈提高家庭网络速度...
  7. idea研习录(01)——ideaIU-2017.3.7安装详解
  8. 不上火勤眨眼远离干眼症
  9. 存储卡被格式化了咋恢复文件?
  10. 期刊论文发表的作者顺序有什么讲究吗
  11. Wi-Fi 7全新升级,小米蓄势待发!
  12. cms php vue 开源_lucms - vue 与 Laravel 开发的后台管理系统
  13. 农业信息化技术导论划重点笔记-农业工程与信息技术
  14. LeetCode-Revers_Bits
  15. FairyGUI摇杆
  16. 程序员幽默:让你笑到肚子痛的搞笑动图
  17. 猫盘安装群晖synology (by quqi99)
  18. 原生JavaScript实现弹球游戏
  19. 解决Safari在线观看视频卡顿的问题
  20. 2块一瓶,2空瓶换一瓶,4瓶盖换一瓶,10块钱喝几瓶?

热门文章

  1. [Python] L1-021. 重要的话说三遍-PAT团体程序设计天梯赛GPLT
  2. 蓝桥杯 ALGO-39 算法训练 数组排序去重
  3. LeetCode 230. Kth Smallest Element in a BST
  4. 【操作系统】死锁-思维导图
  5. 蓝桥杯 ADV-108算法提高 分数统计
  6. kaggle房价预测特征意思_Kaggle竞赛丨房价预测(House Prices)
  7. c语言命令行参数怎么输入_C语言程序设计——这个函数原型你看懂了吗
  8. JS数组遍历和获取数组最值
  9. springboot,hibernate,exception no session 问题解决
  10. java WebSocket的实现以及Spring WebSocket