当前位置: 首页 > article >正文

Java基础面试题04:Iterator 和 ListIterator 的区别是什么?

面试题:Iterator 和 ListIterator 的区别是什么?

在 Java 集合框架中,IteratorListIterator 是两个很常见的工具,用来帮我们在集合里一个个地访问元素。不过,这两者还是有不少差别的!接下来,用最简单的方式帮你搞清楚它们的区别。


一、迭代方向不同

Iterator:只能往前走

  • 就像单行道,只能从头走到尾。
  • 每次调用 next(),就会移动到下一个元素。
  • 如果需要在遍历时删除当前元素,可以用它的 remove() 方法。

ListIterator:可以往前也可以往后

  • 这是个“老司机”,可以双向开车,前后都能迭代。
  • 它有一些专门用来支持反向迭代的方法,比如 hasPrevious()previous()

二、访问方式不同

Iterator:适用所有集合类型

  • 它能迭代 任何类型的 Collection,比如 List、Set、Queue 等。
  • next() 访问下一个元素。
  • 遍历前可以用 hasNext() 检查是否还有更多元素。

ListIterator:只适合 List

  • 只对 List 类型的集合有用,比如 ArrayList、LinkedList。
  • 除了 next() 向前走,它还能用 previous() 向后退。
  • 另外,它还提供了更多的功能,比如:
    • nextIndex()previousIndex():知道当前迭代的位置。
    • add():可以插入新元素。

三、操作能力不同

Iterator:功能比较基础

  • 它的主要任务是遍历集合。
  • 如果需要删除元素,可以用它的 remove() 方法。
  • 但不支持添加或修改元素(只能删)。

ListIterator:功能更强大

  • 这是个“全能选手”,可以边遍历边干活:
    • 添加元素:用 add()
    • 修改元素:用 set()
    • 删除元素:用 remove()
  • 同时,它还能双向迭代,效率更高。

四、啥时候用哪个?

用 Iterator:

  • 如果你只需要 简单地遍历集合,选它就够了。
  • 它适合所有的 Collection 类型。

用 ListIterator:

  • 如果你用的是 List 类型(比如 ArrayList、LinkedList)。
  • 如果你不仅需要遍历,还想 在遍历过程中添加、删除或修改元素

五、简单总结

功能IteratorListIterator
支持集合类型所有 Collection 集合只支持 List 集合
遍历方向只能向前可以双向遍历
修改能力只能删除添加、删除、修改样样行
应用场景基本遍历,不需要复杂操作需要更灵活、更复杂的操作时首选

一句话,Iterator 是基础款,ListIterator 是进阶款!记住它们的使用场景,面试官问起来,你就能轻松应对啦。

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的
7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享

求一键三连:点赞、分享、收藏


http://www.kler.cn/a/408572.html

相关文章:

  • MT8768/MTK8768安卓核心板性能参数_联发科安卓智能模块开发方案
  • Vue生命周期详解
  • Perforce《2024游戏技术现状报告》Part3:生成式AI、版本控制、CI/CD等游戏技术的未来趋势与应用
  • Vue 动态给 data 添加新属性深度解析:问题、原理与解决方案
  • Java 基础知识 (集合框架 + 并发编程 + JVM 原理 + 数据结构与算法)
  • 学习python的第十三天之函数——函数的返回值
  • 大数据新视界 -- Impala 性能优化:量子计算启发下的数据加密与性能平衡(下)(30 / 30)
  • CNN—LeNet:从0开始神经网络学习,实战MNIST和CIFAR10~
  • lambda的作用
  • 嵌入式_串口助手__可以显示图表、进行FFT
  • 《Linux服务与安全管理》| 用户与用户组管理操作
  • L1G6000 OpenCompass 评测
  • 视频 wmv 转MP4
  • 企业OA管理系统:Spring Boot技术实现与案例研究
  • # 16_ Python基础到实战一飞冲天(二)-python基础(十六)--模块
  • LeetCode155. 最小栈(2024冬季每日一题 12)
  • mybatis学习(三)
  • AWS codebuild + jenkins + github 实践CI/CD
  • C++从零到满绩——类和对象(中)
  • Tkinter置顶弹窗提示操作成功
  • rabbitmq结合springboot配置发送消息和消费消息
  • 监控报警系统的指标、规则与执行闭环
  • `--version` 选项在 Java 8 中是不被支持的。Java 8 使用的是 `-version` 选项而不是 `--version`
  • Go语言获取客户端真实IP
  • PowerMILL 客制化宏 - 概念
  • 功能强大的stringstream类