Java for each 和 list的使用

先说说使用for each 的list遍历,假设list是字符串集合

for(String str:list){
  ....
}

假如需求来了,要求删除集合中特定的字符串,你也许会这么做

for(String str:list){
  ...
  if(str.equal("")){
    list.remove(str);
  }
  ...
}

这种需求很常见,那么我们运行一下


运行结果

看到没,报了java.util.ConcurrentModificationException的异常。

我们来分析一下,问题其实出在for each的遍历上,通过反编译我们很清楚for each对list的遍历其实如下

Iterator<String > iterator = list.iterator();
        while(iterator.hasNext()){
            String str = iterator.next();
        }

没错,是用的迭代器。

加入在循环体中使用list.remove 的方法,那么list会减少一项,但是itertor的数据并不会减少。。

那么你会问,既然不影响itertor,那么更不会报错咯?

狗血的是:

迭代器每次next获取数据时,都会判断自身是否和list相同,如果不同,抛出java.util.ConcurrentModificationException异常,现在你知道是什么原因了吧?😄

那么怎么解决上面需求,其实itertor也有remove的方法,具体实现你们自己去敲代码,我先睡觉了,😄

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

推荐阅读更多精彩内容