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
对象。