不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。
 
正确例子:
Iterator iterator = list.iterator();
while(iterator.hasNext())
{
String item = iterator.next();
if (删除元素的条件) {
iterator.remove();
}
} 错误写法例子:
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
System.out.println("移除前:" + list);
for (String item : list) {
if ("1".equals(item)) {
list.remove(item);
}
}
System.out.println("移除后:" + list); 运行结果: 移除前:[1, 2] 移除后:[2]



将上图中的 "1" 修改为"2" ,结果会出乎你的意料。
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
System.out.println("移除前:" + list);
for (String item : list) {
if ("2".equals(item)) {
list.remove(item);
}
}
System.out.println("移除后:" + list);
如下图:

结果是不是出乎大家的意料,所以如果集合中进行remove、add 操作,请使用正确的例子方式。



 

最新文章

  1. 编写高质量代码:改善Java程序的151个建议(第4章:字符串___建议56~59)
  2. hibernate-聚合函数分组统计数据查询
  3. 34 Sources for Test Ideas
  4. MySQL常用简单小命令
  5. 11gR2 Clusterware and Grid Home - What You Need to Know
  6. ExtJs 4: How To Add Grid Cell Tooltip
  7. linux操作笔记
  8. 简单计算器(Android)
  9. information_schema.collation_character_set_applicability 学习
  10. Android 调整屏幕分辩率
  11. 【Android Studio安装部署系列】二十七、Android studio修改项目名称和包名
  12. 用Python手把手教你搭一个Transformer!
  13. springboot Ehcache使用
  14. A+ B
  15. PL/SQL 存储过程
  16. 【转】每天一个linux命令(54):ping命令
  17. No.15 selenium for python JavaScript
  18. CentOS6.9安装httpd并正确配置静态IP地址
  19. prism.js使页面代码变得漂亮
  20. 二、HDFS 架构

热门文章

  1. NLP 文本预处理
  2. leetcode 55. Jump Game、45. Jump Game II(贪心)
  3. 001-poi-excel-基础、单元格使用操作
  4. java读取request中的xml
  5. 源码搭建LAMP环境
  6. 123456---com.twoapp.xiaoxiaozuqiujiang---小小足球将
  7. winform_textbox控件只能输入数字
  8. 修改centos7命令行控制台屏幕分辨率
  9. Direct2D 学习笔记(1)概述
  10. Unity接入九游SDK学习与踩坑