foreach 循环里进行元素的 remove / add 操作使用Iterator

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

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test {

   public static void main(String[] args) {
       List<String> list = new ArrayList<String>();
       list.add("1");
       list.add("2");
       
       // 正确的删除操作使用iterator
       Iterator<String> iterator = list.iterator();
       while (iterator.hasNext()) {
           String item = iterator.next();
           if(item.equals("1")){
               iterator.remove();
           }
       }
       
       // 错误的删除操作
       for(String i : list){
           if (i.equals("2")) {
               list.remove(i);
           }
       }
       
       System.out.println(list);
   }

}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 传送门 解读阿里Java开发手册(v1.1.1) - 异常日志 前言 阿里Java开发手册谈不上圣经,但确实是大量...
    kelgon阅读 9,824评论 4 50
  • 来源与:阿里云栖 禁止用于商业用途 ps:如果需要电子书 评论你们邮箱 我会发给你们 下面感觉还是有点乱 目录 一...
    小向资源网阅读 12,269评论 0 12
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,400评论 0 3
  • 一、编程规约 (一)命名规约 1.【强制】所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结...
    dataliuliu66阅读 4,268评论 0 0
  • 从小,我就喜欢广告,电视上播的,收音机里放的,街边的各种招牌,都对我有着很强的吸引力,有意思的广告,我基本过目不忘...
    雨轩的城阅读 3,892评论 6 4