Java遍历中的删除操作

目录

前言

第一种:普通for循环

第二种:利用迭代器

总而言之


前言

        不妨以List作为例子,当我们需要对一个字符串数组删去其中包含”6.”前缀的元素时,我们下意识会编写出这样的代码:

  • 第一种:普通for循环

        这样的写法我们在C/C++里经常用,无非是多使用了Java自带的List.remove()的方法删去元素罢了。我们很当然的觉得程序运行的结果一定是:list中所有元素都被删除,然而….

        居然有一个元素没有被删除!这是为什么

        最开始时,i=0,list.size()=3,temp=list[0]=6.045,包含”6.”前缀,删去,i++;删除后,list中剩余所有元素都向前移了一位(索引-1:类似于取出队首元素,其他元素自动前进补齐空缺),此时i=1,list.size()=2,temp=list[0]=6.813,包含”6.”前缀,删去,i++;此后list.size()=1,循环结束

        所以,其实问题出在了List.remove()方法使用后,元素的索引改变导致某些元素未被访问到,更改方式其实很简单——倒序遍历数组

        好耶,和预想的结果相同!!

  • 第二种:利用迭代器

        如果是接触过迭代器的小伙伴,也可能写出这样的代码

        或者引入写法比较简单的增强for循环【实际就是简化版的迭代器,底层实现相同】

        这样的写法真是方便又高级,但是怎么会 错啊…

        运行结果中抛出异常信息。这是因为触发了集合中并发修改的异常,接下来我们通过源码对抛出异常的原因进行剖析。 

        在集合的方法中,是通过返回对象来获得迭代器的。是的一个内部类,它实现了接口,代码如下:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月2日
下一篇 2022年5月3日

相关推荐