「Java」Java面试题-遍历中从List中删除一个元素


「Java」Java面试题-遍历中从List中删除一个元素
文章图片
「Java」Java面试题-遍历中从List中删除一个元素
文章图片
「Java」Java面试题-遍历中从List中删除一个元素
文章图片
「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 , 也能删除元素 , 这样就只能删除一个元素 。