Java中可用ArrayList模拟队列,但非线程安全且未专为队列优化;入队用add()、出队用remove(0)(需判空)、查看队首用get(0)(需判空),时间复杂度分别为均摊O(1)、O(n)、O(1),适合教学或小规模非并发场景。

Java 中可以用 ArrayList 模拟队列(FIFO:先进先出),但要注意它不是线程安全的,也不像 LinkedList 或 ArrayDeque 那样为队列操作专门优化。不过在简单场景(如教学、小规模数据、非并发环境)下,用 ArrayList 实现基础队列功能是可行的。
添加元素(入队)——用 add() 方法
队列尾部添加元素,对应 ArrayList.add(E),时间复杂度平均 O(1)(扩容时为 O(n),但均摊仍是 O(1))。
- 直接调用
list.add(element)即可,新元素自动加到末尾 - 无需指定索引,避免用
add(index, element)插入开头,那会引发大量元素移动,效率低
移除并获取头部元素(出队)——用 remove(0)
队列要求从头部取出元素,ArrayList.remove(0) 可实现,但注意:这会导致剩余所有元素向前移动一位,最坏时间复杂度为 O(n)。
- 使用前务必检查是否为空:
if (!list.isEmpty()) { return list.remove(0); } - 不要用
get(0)+remove(0)分两步,除非你需要先查看再决定是否移除
查看队首元素(不移除)——用 get(0)
只读取第一个元素,不改变队列状态,时间复杂度 O(1)。
立即学习“Java免费学习笔记(深入)”;
- 同样需判空:
return list.isEmpty() ? null : list.get(0); - 若元素类型是基本类型包装类或不可为空,建议用 Optional 或抛异常处理空情况
其他常用辅助操作
保持队列语义清晰,建议封装成简单工具类或方法:
-
isEmpty()判断是否为空 —— 推荐优先使用,比size() == 0更语义化 -
size()获取当前长度 —— 可用于判断容量或调试 - 避免频繁调用
remove(0)处理大量数据;高吞吐或高频出队场景请改用ArrayDeque
不复杂但容易忽略:用 ArrayList 做队列本质是“以空间换简单性”,适合理解原理或临时脚本;生产代码中更推荐 ArrayDeque(无同步开销、头尾操作都 O(1))或 LinkedBlockingQueue(支持阻塞和线程安全)。


















