使用 iterator 迭代器删除集合元素为什么更好

1、安全性:

  • 在多线程情况下,使用迭代器的remove()方法修改集合可以避免在遍历集合的过程中修改集合,从而避免ConcurrentModificationException并发修改异常异常(在使用迭代器遍历集合时,每次使用迭代器的next()方法获取下一个元素时,迭代器都会检查集合是否被修改过,如果在迭代器外部修改了集合的结构,则会抛出此异常)。

  • 单线程情况下虽然没有并发修改异常,但如果在遍历集合时使用集合自身的方法进行修改,会导致集合的结构发生变化,后续元素的索引也发生变化,从而影响了遍历的结果。具体来说,如果在遍历过程中添加或删除元素,可能会导致某些元素被跳过或多次遍历,或者导致遍历过程中抛出异常。
    举个例子:假设有一个ArrayList列表,包含如下元素:[1, 2, 3, 4, 5],现在使用for循环遍历该列表,并在遍历到第三个元素时,使用remove()方法删除该元素,在执行完第三次循环之后,列表中的元素发生了变化,变成了[1, 2, 4, 5],此时i的值为3,由于删除元素后索引前移, 索引3对应的值为元素5, 元素4就这样被跳过了。这样就导致了某些元素被跳过或多次遍历的情况。

2、高效性:

使用迭代器的remove()方法不仅能够避免并发修改异常,还能够高效地删除元素。因为迭代器内部维护了一个指向当前元素的指针,所以在使用迭代器遍历集合时,可以直接删除当前元素,而不需要再次查找该元素的位置。而使用集合自身的remove()方法删除元素时,需先从集合中查找该元素的位置,然后再执行删除操作,效率相对较低。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值