跳转至

如何选择顺序存储数据结构?

一、常见顺序存储

结构 随机访问 插入/删除 内存
数组 O(1) O(n) 连续
链表 O(n) O(1)(已知位置) 节点分散
ArrayList 同数组 尾部 O(1),中间 O(n) 连续
LinkedList 同链表 O(1) 指针开销

二、选择依据

1. 读多写少

ArrayList / 数组。随机访问快,缓存友好。

2. 频繁中间插入删除

LinkedList。但实际业务中 LinkedList 用得少,因为:

  • 缓存不友好。
  • 节点对象开销大。
  • 即使知道位置,查找位置本身要 O(n)。

3. 频繁尾部追加

ArrayList 动态扩容就够。

4. 队列 / 栈

  • 栈:ArrayDequeStack 好。
  • 队列:ArrayDequeLinkedList

三、实际经验

  • 95% 场景用 ArrayList
  • LinkedList 几乎不用。
  • 需要删除元素用迭代器或 removeIf,不要 for 循环里 remove。

四、对比 Vector

Vector 所有方法 synchronized,性能差。单线程用 ArrayList,多线程用 CopyOnWriteArrayList 或外部加锁。

一句话

优先 ArrayList,除非明确需要 LinkedList 的中间插入特性(实际很少)。