JAVA面试Iterator和ListIterator的区别

JAVA面试Iterator和ListIterator的区别

编码文章call10242025-10-22 21:54:504A+A-

我们来用一个非常通俗易懂的方式讲解Iterator和 ListIterator的区别。

你可以把它们想象成两种不同功能的“书签”。

一、用一个比喻来理解

假设你有一本书(这个书就相当于Java中的List集合,比如 ArrayList或LinkedList)。

Iterator (普通书签)

它就像是一个最基础的书签,只有一个主要功能:帮你记住你读到哪一页了,然后让你一页一页地往后翻。

它能做什么?

hasNext(): 问你:“后面还有页吗?”

next(): 帮你翻到下一页,并告诉你这一页的内容。

remove(): 把你当前看的这一页从书上撕掉。这是它唯一能修改书的行为。

它不能做什么?

不能往前翻。一旦翻过去了,就回不来了。

不能在阅读的过程中往书里加一页新内容。

不能修改某一页上的内容(除了撕掉整页)。

ListIterator (高级智能书签)

这是一个功能强大的智能书签。它继承了普通书签的所有功能,并且额外增加了很多高级功能。

它额外能做什么?

双向移动:不仅可以向后翻(next()),还可以向前翻 (previous())。

hasPrevious(): 问你:“前面还有页吗?”

previous(): 帮你翻到上一页。

获取位置:告诉你现在精确的页数(索引)。

nextIndex(), previousIndex()

修改内容:允许你用笔修改当前这一页上的文字,而不仅仅是撕掉整页。

set(E e): 修改当前遍历到的元素。

添加内容:允许你在当前的位置插入一页全新的内容。

add(E e): 添加一个新元素,这个新元素会立刻出现在你刚看的那一页和即将要看的那一页之间。


二、什么时候用哪个?

用Iterator:

当你只是简单地想遍历一个集合(不一定是List,也可以是Set),并且过程中可能只需要删除某些元素时。这是最常用、最通用的选择。

// 遍历一个Set,并删除元素

Iterator<String> it = set.iterator();

while (it.hasNext()) {

String item = it.next();

if (item.equals("bad")) {

it.remove(); // 使用迭代器安全删除

}

}

用ListIterator:

当你需要遍历一个List,并且需求比较复杂时:

需要反向遍历(从后往前)。

需要在遍历过程中替换(修改)某个元素的值。

需要在遍历过程中插入(添加)新的元素。

// 遍历一个List,修改和添加元素

ListIterator<String> listIt = list.listIterator();

while (listIt.hasNext()) {

String item = listIt.next();

if (item.equals("world")) {

listIt.set("Java"); // 把 "world" 修改成 "Java"

}

if (item.equals("hello")) {

listIt.add("inserted"); // 在 "hello" 后面插入 "inserted"

}

}


// 现在还可以反向再遍历回去

while (listIt.hasPrevious()) {

System.out.println(listIt.previous());

}


三、核心要点记住这三点就够了:

功能上:Iterator是基础版(只能向前、删除);ListIterator 是豪华版(可前后、可增删改)。

范围上:Iterator可用于所有集合;ListIterator 只用于List。

关系上:ListIterator是Iterator的儿子,功能更强。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4