美文网首页
对JAVA集合进行遍历删除时务必要用迭代器

对JAVA集合进行遍历删除时务必要用迭代器

作者: MayerBin | 来源:发表于2018-12-01 10:41 被阅读0次

今天同事写了几行类似这样的代码:

public static void main(String args[]) {
    List<String> famous = new ArrayList<String>();
    famous.add("liudehua");
    famous.add("madehua");
    famous.add("liushishi");
    famous.add("tangwei");
    for (String s : famous) {
        if (s.equals("madehua")) {
            famous.remove(s);
        }
    }
}

运行出异常:

Exception in thread "main" java.util.ConcurrentModificationException

at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)

at java.util.AbstractList$Itr.next(AbstractList.java:343)

at com.bes.Test.main(Test.java:15)
```





# Java新手最容易犯的错误,对JAVA集合进行遍历删除时务必要用迭代器。切记。

其实对于如上for循环,运行过程中还是转换成了如下代码:

```
for(Iterator<String> it = famous.iterator();it.hasNext();){
         String s = it.next();
         if(s.equals("madehua")){
             famous.remove(s);
         }
     }

```

仍然采用的是迭代器,但删除操作却用了错误的方法。如将famous.remove(s)改成it.remove()

则运行正常,结果也无误。

当然如果改成:

```
for (int i = 0; i < famous.size(); i++) {
            String s = famous.get(i);
            if (s.equals("madehua")) {
                famous.remove(s);
            }
        }

```



这种方法,也是可以完成功能,但一般也不这么写。

为什么用了迭代码器就不能采用famous.remove(s)操作? 这种因为ArrayList与Iterator混合使用时会导致各自的状态出现不一样,最终出现异常。


参考链接:https://www.cnblogs.com/goody9807/p/6432904.html

相关文章

  • 对JAVA集合进行遍历删除时务必要用迭代器

    今天同事写了几行类似这样的代码: 运行出异常:

  • Fail-Fast & Fail-Safe

    一、Fail-Fast: 在用迭代器遍历一个集合对象时,如果遍历过程中对结合对象内容进行了修改(增加、删除...

  • Iterator迭代器

    前言: Java中的Iterator迭代器是为了对集合进行迭代 迭代器的使用:

  • java学习笔记6

    迭代器的原理及源码解析 A:迭代器原理迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所...

  • 二.Collection集合

    1.Collection常用方法 2.Iterator迭代器:对集合进行遍历 3.集合的两种遍历方式 (1)使用迭...

  • 设计模式——迭代器模式

    什么是迭代器模式 用迭代器来封装集合对象的遍历细节,使调用者能够通过统一的接口来实现对集合的遍历。 迭代器也给集合...

  • List集合

    List集合特有的方法 list集合可以用迭代器和for循环进行遍历 迭代器并发修改异常 ListIterator...

  • Map----entrySet

    Map集合不需要迭代器; 他是先将Map集合转化为Set集合; 然后Set集合调用迭代器进行遍历。 Map.Ent...

  • 快速失败(fail-fast)和安全失败(fail-safe)

    序言 我们有这种场景,比如对Java集合类进行遍历,但是在遍历过程中对集合进行修改(增加、删除、修改),这里会抛出...

  • 迭代器模式

    一. 什么是迭代器模式 迭代器模式: 用来遍历集合对象 (集合在这里也叫做容器) 迭代器模式, 将对集合的遍历操作...

网友评论

      本文标题:对JAVA集合进行遍历删除时务必要用迭代器

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