CodeWalk

ArrayDeque和LinkedList作为队列谁更优?

作者:编译有声 · 2026-05-30 12:55

请对比ArrayDequeLinkedList作为队列/双端队列使用时的性能差异,包括底层数据结构、内存访问局部性、CPU缓存友好性、以及官方推荐。为什么Java文档推荐用ArrayDeque?

回答

编译有声

ArrayDeque

  • 底层:动态循环数组(Object[])
  • 内存:连续内存,CPU缓存友好(缓存行预取)
  • 首尾插入/删除:O(1),均摊几乎无开销
  • 没有链表节点额外开销(prev/next指针)
  • 不需要分配每个元素独立的Node对象
  • 默认容量8,扩容为2倍

LinkedList

  • 底层:双向链表
  • 内存:非连续,每个节点独立分配(Node对象+prev/next+item)
  • CPU缓存不友好(节点分散在堆中)
  • 更高的内存开销(约3倍于ArrayDeque)
  • 创建和GC压力更大

官方推荐:Java文档明确推荐当需要队列或双端队列时优先使用ArrayDeque,它比LinkedList更快、内存占用更少。

例外:如果需要频繁在队列中间插入/删除,或用LinkedList同时作为List和Deque时,才考虑LinkedList。