
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删除元素一样的问题。
如果删除完直接break,也能删除元素,这样就只能删除一个元素。
本文探讨了在Java面试中常见的问题——如何在遍历List时删除元素。通过四种方法展示了删除操作:正序删除、倒序删除、使用Iterator删除以及对于foreach循环的处理。在使用for循环和foreach时,由于修改了集合导致异常,解决方案包括i--操作和使用Iterator的remove方法。同时强调了在遍历过程中删除元素需要注意的细节和可能遇到的并发修改异常。

被折叠的 条评论
为什么被折叠?



