小问题3 | foreach和iterator有什么区别?

本文详细比较了Java中foreach循环与Iterator在遍历ArrayList和LinkedList时的行为,以及它们在处理remove操作时的不同。同时探讨了Iterator的通用性及其在不同数据结构中的访问效率优势。最后,解答了关于Iterator和集合remove()方法的区别问题。
摘要由CSDN通过智能技术生成
小问题3 | foreach和iterator有什么区别?

前置问题来自:小问题1 | 如何遍历ArrayList?遍历ArrayList的3种方法

从两个角度讲,

逻辑角度的:

  1. 当需要删除序列元素时,foreach循环会发生错误

    以List为例,如果在循环的过程中调用集合的remove()方法,就会导致循环出错,因为循环过程中list.size()的大小变化了。

    在循环的过程中调用iterator的remove()方法则不会出现这种问题。

效率角度的:

  1. 访问效率随数据结构不同而不同

    • 采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快。
    • 采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快。
  2. Iterator 可以使用相同方式去遍历集合

    使用 Iterator 的好处在于可以使用相同方式去遍历集合中元素,而不用考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口)

    • 如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改
    • 如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整,因为List有序,Set无序,结构不同,他们的访问算法也不一样。

在了解了上述内容之后,可能有朋友会产生一个新问题:

迭代器Iterator的的remove()方法和集合的remove()方法有什么区别?

为什么一个可以,另一个就不行?

我们带着这个问题继续看。

————————————————————

本专栏是【小问题】系列,旨在每篇解决一个小问题,并秉持着刨根问底的态度解决这个问题可能带出的一系列问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值