美文网首页
Java for each 和 list的使用

Java for each 和 list的使用

作者: 浮云骑士_ | 来源:发表于2017-02-28 22:43 被阅读0次

先说说使用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的方法,具体实现你们自己去敲代码,我先睡觉了,😄

相关文章

网友评论

      本文标题:Java for each 和 list的使用

      本文链接:https://www.haomeiwen.com/subject/bxvfgttx.html