迭代器Iterator在遍历时能remove但是不能往集合里添加元素问题

Iterator遍历与删除机制
本文解析了使用Iterator遍历集合时的注意事项,强调了在遍历过程中删除元素的正确方式,即使用Iterator的remove()方法,而非集合的remove()方法。同时提醒读者在遍历期间避免修改集合,以防破坏迭代器的结构。

这个是个坑让我一个很简单的笔试题竟然20分钟写不出来的原因之一

我们都知道如果是像List集合这样的,如果用循环遍历,访问没问题,在这期间如果删除就会报错,这个问题是因为你改变了集合的长度,但是遍历用的原来的长度的原因,

所以Iterator优秀点就出现了,它的出现让你可以在遍历时删除你想删除的元素,它用while循环遍历,它往下循环也就是while里的判定条件是Iterator.hasNext() 返回的是boolean类型,看这个也明白,它是在你想继续往下遍历时先查询是否存在下一个元素。

而且集合转Iterator也不麻烦,集合本身就有这个方法

Iterator<泛型> it = 集合.iterator();

敲黑板
下面要讲两点重要的还容易忘的误区

  1. 如果在遍历时删除元素不要用集合的 remove() 方法,要用迭代器的 iterator.remove()
    方法,虽然没有参数,但是它移除的是当前的。
  2. 在用迭代器迭代的时候千万不要修改集合和给集合添加元素,这样会报错,因为你迭代时添加元素会破坏迭代器的结构,所以会报错,因为拿ArrayList为例,在遍历到中间的时候,你往集合头部插入元素,集合的结构肯定变吧,那迭代器的数据结构也会跟着变,它就会主动报错,,但是删除就没问题了,因为你用的是迭代器删除方法,而迭代器没有添加元素的方法
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值