面试题:Iterator 和 ListIterator 的区别是什么?
在 Java 集合框架中,Iterator 和 ListIterator 是两个很常见的工具,用来帮我们在集合里一个个地访问元素。不过,这两者还是有不少差别的!接下来,用最简单的方式帮你搞清楚它们的区别。
一、迭代方向不同
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)。
- 如果你不仅需要遍历,还想 在遍历过程中添加、删除或修改元素。
五、简单总结
功能 | Iterator | ListIterator |
---|---|---|
支持集合类型 | 所有 Collection 集合 | 只支持 List 集合 |
遍历方向 | 只能向前 | 可以双向遍历 |
修改能力 | 只能删除 | 添加、删除、修改样样行 |
应用场景 | 基本遍历,不需要复杂操作 | 需要更灵活、更复杂的操作时首选 |
一句话,Iterator 是基础款,ListIterator 是进阶款!记住它们的使用场景,面试官问起来,你就能轻松应对啦。
最后说一句(求关注,求赞,别白嫖我)
最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的 7701页的BAT大佬写的刷题笔记,让我offer拿到手软
本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享