「Java」Java面试题-遍历中从List中删除一个元素
文章图片
文章图片
文章图片
文章图片
Java面试题-遍历中从List中删除一个元素
列表List是Java中的一种数据结构 , 存放按照添加顺序的元素 , 是个有序的集合 。 面试中常常被问到 , 效率 , 实现方式以及怎么在遍历中删除一个元素 。 本文就来实现在遍历中删除一个元素 。
1、for循环中删除一个元素 , 正序删除一个元素
正序删除一个元素
这种删除一个元素没有问题 , 但如果还有其他业务逻辑的时候 , 会少处理一个元素 , 因为数据的索引变了 , 怎么解决?最简单的方式就是添加i-- , 代码如下:
解决少元素问题
2、for循环中删除一个元素 , 倒叙删除一个元素 , 倒叙删除元素的时候 , 没有上面的问题 , 因为要处理的元素的索引没变 。
倒序删除一个元素
3、用迭代删除一个元素 , 先看看下面的代码是否有问题?
迭代中删除一个元素
如果运行这个代码 , 会抛出一个异常ConcurrentModificationException , 原因就是用list的remove删除元素时 , 只改变了modCount , 然而Iterator中的next方法中会检查modCount和expectedModCount是否一致 , 如果不一致就会抛出异常 。 我们可以用Iterator的remove方法 ,
删除一个元素
4、foreach是否可以删除元素?
foreach删除一个元素
这段代码也会抛出ConcurrentModificationException异常 , 因为foreach会在编译的时候转成Iterator , 我们反编译下代码 ,
反编译后代码
从编译后的代码看 , foreach被转成了Iterator , 这就和Iterator遍历时用list的remove删除元素一样的问题 。
【「Java」Java面试题-遍历中从List中删除一个元素】如果删除完直接break , 也能删除元素 , 这样就只能删除一个元素 。
- 『Java』java数据结构系列——什么是数据结构
- 『Java』马云:成功人跟普通人差不多,但这三点我一定要分享给所有年轻人
- #Java#java线程到底有多少种状态?
- #智能手表#1、初识java-1
- [华为]有朋友问我“JAVA全栈”、“互联网架构师”和“JAVAEE”到底是什么?
- 「javascript」这边走Javascript了解一下
- 「华为」一篇有趣的Java class
- struts@Java面试之项目面试问题——不看面试会后悔的
- 「Java」六面蚂蚁金服,唬住了面试官要了30K;其实Java面试也没那么难
- Java@23种java设计模式之:建造者模式、工厂方法模式、抽象工厂模式!