java中删除list中某一条记录,Java面试题-遍历中从List中删除一个元素

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

d390d10662e38e60e427e77f53dc42e9.png

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

列表List是Java中的一种数据结构,存放按照添加顺序的元素,是个有序的集合。面试中常常被问到,效率,实现方式以及怎么在遍历中删除一个元素。本文就来实现在遍历中删除一个元素。

1、for循环中删除一个元素,正序删除一个元素

05cdf71da081e3eabf99e0e23d131f72.png

正序删除一个元素

这种删除一个元素没有问题,但如果还有其他业务逻辑的时候,会少处理一个元素,因为数据的索引变了,怎么解决?最简单的方式就是添加i--,代码如下:

34f9f4e0c1ba2da04a2d044e36e75213.png

解决少元素问题

2、for循环中删除一个元素,倒叙删除一个元素,倒叙删除元素的时候,没有上面的问题,因为要处理的元素的索引没变。

ea4caa871dc72a68f51ac6a75f9ae619.png

倒序删除一个元素

3、用迭代删除一个元素,先看看下面的代码是否有问题?

a96355e99aaf45982218c1fe8307b113.png

迭代中删除一个元素

如果运行这个代码,会抛出一个异常ConcurrentModificationException,原因就是用list的remove删除元素时,只改变了modCount,然而Iterator中的next方法中会检查modCount和expectedModCount是否一致,如果不一致就会抛出异常。我们可以用Iterator的remove方法,

2579ca450e844035d9423f5ca56057ec.png

删除一个元素

4、foreach是否可以删除元素?

ad059a0adfd0e1faf4ae8dffb2bfc06c.png

foreach删除一个元素

这段代码也会抛出ConcurrentModificationException异常,因为foreach会在编译的时候转成Iterator,我们反编译下代码,

25743cb652f5485b73518d9e52ee69e4.png

反编译后代码

从编译后的代码看,foreach被转成了Iterator,这就和Iterator遍历时用list的remove删除元素一样的问题。

如果删除完直接break,也能删除元素,这样就只能删除一个元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值