使用 iterator 遍历 linkedlist 是最高效且安全的做法,因为它直接利用链表节点的内部指针进行 o(1) 的步进操作,避免了随机访问带来的性能损耗。在代码实现中,只需调用 list.iterator() 获取迭代器实例,并通过 while 循环配合 hasnext() 和 next() 方法即可完成遍历。这种模式不仅代码简洁,还能在遍历时安全地移除元素,防止并发修改异常。

为什么 LinkedList 不适合用 for-each 或索引遍历
虽然 Java 的 for-each 语法糖底层也是使用 Iterator,但在某些特定场景下,显式使用 Iterator 能更清晰地表达意图并避免潜在的类型转换开销。更重要的是,绝对禁止使用基于索引的 get(index) 方法进行遍历,因为 LinkedList 的 get() 方法需要从头部或尾部开始线性搜索指定位置的节点,时间复杂度为 O(n),导致整体遍历复杂度退化至 O(n²)。相比之下,Iterator 内部维护了一个指向当前节点的引用,每次调用 next() 只是简单地移动到下一个节点,时间复杂度稳定在 O(1)。

import java.util.LinkedList;
import java.util.Iterator;
public class LinkedListTraversal {
public static void main(String[] args) {
LinkedList<string> list = new LinkedList();
list.add("A");
list.add("B");
list.add("C");
// 高效遍历方式:使用 Iterator
Iterator<string> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
// 如果需要移除元素,必须使用 iterator.remove()
// if ("B".equals(item)) {
// iterator.remove();
// }
}
}
}</string></string>
如何在遍历过程中安全地移除元素
在遍历 LinkedList 时,如果需要根据条件移除元素,必须使用 Iterator 提供的 remove() 方法,而不能直接使用 list.remove() 或增强型 for 循环中的逻辑。这是因为 LinkedList 的结构在遍历过程中可能发生变化,直接调用集合的移除方法会破坏迭代器的内部状态,导致抛出 ConcurrentModificationException。Iterator 的 remove() 方法会在移除当前元素后正确更新迭代器的指针位置,确保后续遍历的正常进行。这是处理动态集合遍历时唯一推荐的安全模式。

import java.util.LinkedList;
import java.util.Iterator;
public class SafeRemovalExample {
public static void main(String[] args) {
LinkedList<integer> list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
Iterator<integer> it = list.iterator();
while (it.hasNext()) {
Integer num = it.next();
if (num % 2 == 0) {
// 安全移除偶数元素
it.remove();
}
}
System.out.println(list); // 输出: [1, 3]
}
}</integer></integer>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











