贝利信息

Java集合框架中的Queue与Deque接口的实现

日期:2026-01-06 00:00 / 作者:P粉602998670
Java中Queue常用实现类包括ArrayDeque(首选,性能优但不支持null)、LinkedList(支持null但性能差)和PriorityQueue(优先队列,非FIFO);Deque接口更灵活,支持双端操作;阻塞队列如LinkedBlockingQueue适用于多线程协作。

Queue接口的常用实现类及适用场景

Java中Queue是单端队列接口,核心语义是“FIFO(先进先出)”,但不强制要求——比如PriorityQueue实际是堆实现的优先队列,出队顺序由元素自然序或Comparator决定。

真正严格遵循FIFO的常见实现有:

Deque接口为什么能替代Queue,又比它更灵活

Deque(Double-ended Queue)扩展自Queue,允许从两端插入、删除、查看元素。所有Deque实现天然兼容Queue用法,但反过来不成立。

关键点在于方法命名与语义分层:

ArrayDeque与LinkedList作为Queue使用的性能差异

很多人误以为LinkedList作为队列更快,其实恰恰相反:ArrayDeque在绝大多数队列操作中都显著更快,原因在于CPU缓存局部性好、无对象头开销、无指针跳转。

典型对比(JDK 17+,百万次操作):

// ArrayDeque: add() + poll() 循环
Time: ~12 ms

// LinkedList: add() + poll() 循环  
Time: ~48 ms

真实项目中应默认选ArrayDeque,除非明确需要以下任一条件:

阻塞队列(BlockingQueue)不是Queue的“升级版”,而是不同契约

BlockingQueue继承自Queue,但语义完全不同:它专为**线程间协作**设计,核心是put()take()

类会阻塞的方法。

常见实现与选择依据:

别把BlockingQueue当普通Queue用——如果只是单线程或已有其他同步机制,用ArrayDeque更轻量、更可控。