Java Iterator 遍历 ArrayDeque 怎么高效
使用 arraydeque 的 iterator() 方法获取迭代器,并通过 while(iterator.hasnext()) 循环配合 next() 进行遍历是最高效且标准的做法。该方法直接基于底层数组实现,时间复杂度为 o(n),避免了索引查找开销。在 java 8 及以上版本中,推荐使用增强型 for 循环(语法糖),其内部自动调用此迭代器模式,代码更简洁且性能一致。

为什么 ArrayDeque 的 Iterator 比 ListIterator 更高效
ArrayDeque 不支持随机访问,因此不存在高效的 ListIterator。其 iterator() 返回的是从头部到尾部顺序遍历的迭代器,而 descendingIterator() 则提供从尾部到头部的反向遍历。两者都直接操作底层数组指针,无额外对象创建开销。若需双向遍历,应分别调用这两个方法,而非尝试转换或缓存结果。

import java.util.ArrayDeque;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayDeque<String> deque = new ArrayDeque<>();
deque.add("A");
deque.add("B");
deque.add("C");
// 正向遍历
Iterator<String> it = deque.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 反向遍历
Iterator<String> descIt = deque.descendingIterator();
while (descIt.hasNext()) {
System.out.println(descIt.next());
}
}
}
预期输出: A B C C B A
遍历时修改 ArrayDeque 会抛出什么异常
在迭代过程中直接调用 ArrayDeque 的 add()、remove() 等结构修改方法,会触发 ConcurrentModificationException。这是 fail-fast 机制的体现,用于检测并发修改。若需在遍历中移除元素,必须使用迭代器的 remove() 方法,该方法安全地更新迭代器状态和底层结构,不会引发异常。
立即学习“Java免费学习笔记(深入)”;

import java.util.ArrayDeque;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayDeque<String> deque = new ArrayDeque<>();
deque.add("A");
deque.add("B");
deque.add("C");
Iterator<String> it = deque.iterator();
while (it.hasNext()) {
String item = it.next();
if ("B".equals(item)) {
it.remove(); // 安全移除
}
}
System.out.println(deque); // [A, C]
}
}
预期输出:[A, C]


















