Java中的LinkedList listIterator()方法
listIterator() 方法是 LinkedList 类中的一个方法。它返回一个 ListIterator 对象,可以遍历和修改 LinkedList 中的元素。该方法的语法如下:
public ListIterator<E> listIterator()
该方法没有参数,返回一个 ListIterator 类型的对象。当在迭代的过程中插入、删除元素时,必须使用 ListIterator 对象,而不能使用 Iterator 对象。
使用示例
示例代码如下所示:
import java.util.LinkedList;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
LinkedList<String> linkedList = new LinkedList<String>();
linkedList.add("Alice");
linkedList.add("Bob");
linkedList.add("Charlie");
linkedList.add("David");
ListIterator<String> iterator = linkedList.listIterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
System.out.println("---");
while (iterator.hasPrevious()) {
String element = iterator.previous();
System.out.println(element);
}
}
}
输出结果为:
Alice
Bob
Charlie
David
---
David
Charlie
Bob
Alice
在这个例子中,我们首先创建了一个 LinkedList 对象,并添加了一些元素。然后我们获取的 listIterator 对象,并使用 while 循环来遍历其中的所有元素。在第一次循环中,我们使用 next 方法来遍历元素。在第二次循环中,我们使用 previous 方法来反向遍历元素。请注意,反向遍历必须在正向遍历后进行。这是因为 ListIterator 对象只有在正向遍历时才会被初始化。
方法解析
让我们来分析一下 ListIterator 对象的方法。
hasNext()
public boolean hasNext()
该方法返回一个布尔值,表示迭代器是否还有下一个元素。如果有,返回 true,否则返回 false。
ListIterator<String> iterator = linkedList.listIterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
上述代码中,我们使用 hasNext 方法检查迭代器是否还有下一个元素,并通过 next 方法遍历元素。
hasPrevious()
public boolean hasPrevious()
该方法返回一个布尔值,表示迭代器是否还有上一个元素。如果有,返回 true,否则返回 false。
ListIterator<String> iterator = linkedList.listIterator();
while (iterator.hasPrevious()) {
String element = iterator.previous();
System.out.println(element);
}
上述代码中,我们使用 hasPrevious 方法检查迭代器是否还有上一个元素,并通过 previous 方法反向遍历元素。
next()
public E next()
该方法返回迭代器的下一个元素,并将指针指向下一个元素。
ListIterator<String> iterator = linkedList.listIterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
上述代码中,我们使用 next 方法获取迭代器的下一个元素。
previous()
public E previous()
该方法返回迭代器的上一个元素,并将指针指向上一个元素。
ListIterator<String> iterator = linkedList.listIterator();
while (iterator.hasPrevious()) {
String element = iterator.previous();
System.out.println(element);
}
上述代码中,我们使用 previous 方法获取迭代器的上一个元素。
add(E element)
public void add(E element)
该方法将元素插入到迭代器的当前位置。该方法可以插入多个元素,但必须是连续的。
ListIterator<String> iterator = linkedList.listIterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("Charlie")) {
iterator.add("Bob");
iterator.add("Alice");
break;
}
}
System.out.println(linkedList);
上述代码中,我们在迭代器的当前位置插入了 “Bob” 和 “Alice” 两个元素。这两个元素会被插入到迭代器指针的前面。输出结果为:
[Alice, Bob, Charlie, Bob, Alice, David]
remove()
public void remove()
该方法将迭代器当前位置的元素移除。该方法只能在 next 或 previous 方法之后调用。
ListIterator<String> iterator = linkedList.listIterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("Charlie")) {
iterator.remove();
break;
}
}
System.out.println(linkedList);
上述代码中,我们使用 remove 方法将迭代器当前位置的元素 “Charlie” 移除。输出结果为:
[Alice, Bob, Bob, Alice, David]
set(E element)
public void set(E element)
该方法将迭代器当前位置的元素设置为指定的元素值。该方法只能在 next 或 previous 方法之后调用。
ListIterator<String> iterator = linkedList.listIterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("Charlie")) {
iterator.set("Chris");
break;
}
}
System.out.println(linkedList);
上述代码中,我们使用 set 方法将迭代器当前位置的元素 “Charlie” 设置为 “Chris”。输出结果为:
[Alice, Bob, Chris, Alice, David]
结论
总结一下,LinkedList 的 listIterator 方法返回一个 ListIterator 对象,它可以遍历和修改 LinkedList 中的元素。ListIterator 对象提供了多个有用的方法,如 hasNext、hasPrevious、next、previous、add、remove 和 set。需要注意的是,在迭代的过程中插入、删除元素时,必须使用 ListIterator 对象,而不能使用 Iterator 对象。
极客笔记