美文网首页
容器遍历时删除元素

容器遍历时删除元素

作者: CanZh | 来源:发表于2019-05-03 21:50 被阅读0次

    在Java中,对于容器的遍历有for循环和爹代器两种方法,其中,for循环有包括了传统的for循环和for each方法。迭代器主要用Uterator(另外还有ListIterator ,双向迭代器;Enumeration,相当于Iterator。现已取代)

    具体使用方法(以包含Integer元素的 List为例):

    传统for:

         for(int i=0;i<list.size();i++){

                    ...

            }

    for each:

        for(Integer item:list){

            ...

        }

    迭代器:

         Iterator item = list.iterator();

            while(  item.hasNext()){

                Integer dat = intem.next();

                ...

            }

    在以上三种迭代方法中,如果要一边遍历,一边删除元素,则必须用迭代器方式。若果使用for each删除,则会触发`ConcurrentModificationException`错误:

        for (Object e : list) {

                    System.out.println(e);

                    if("b".equals(e)){

                        list.remove(e);//操作集合的删除方法

                    }

                }

        运行结果:

        a

        b

        Exception in thread "main" java.util.ConcurrentModificationException

        修改

        Iterator it=list.iterator();

                while(it.hasNext()){

                    Object e=it.next();

                    if("b".equals(e)){

                        it.remove();

                    }

                }

                System.out.println(list);

    **不能使用集合类的remove方法,而是要使用Iterator的remove方法**

    相关文章

      网友评论

          本文标题:容器遍历时删除元素

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