Skip to content

数据结构基础:集合框架的基石

五种核心数据结构

Java 集合框架建立在五种核心数据结构之上:

数据结构时间复杂度特点Java 实现
数组O(1) 随机访问连续内存,CPU 缓存友好ArrayList
链表O(1) 头尾操作分散内存,动态大小LinkedList
哈希表O(1) 均摊查找散列分布,快速定位HashMap
O(log n) 查找有序,自动平衡TreeMap
O(log n) 堆化优先级队列PriorityQueue

数组 vs 链表

数组:连续内存,下标访问 O(1)
┌───┬───┬───┬───┬───┬───┐
│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │
└───┴───┴───┴───┴───┴───┘

链表:分散内存,通过指针连接
┌───┐   ┌───┐   ┌───┐
│ 0 │──▶│ 1 │──▶│ 2 │──▶ null
└───┘   └───┘   └───┘
操作数组链表
随机访问O(1)O(n)
头部插入O(n)O(1)
尾部插入O(1)O(1)
中间插入O(n)O(n)

哈希表

通过哈希函数将 key 映射到数组索引:

key = "apple"
hashCode("apple") = 12345678
index = hash & (capacity - 1) = 0~15 之间的某个位置

冲突解决:链表(JDK 1.7 头插法 / JDK 1.8+ 尾插法)+ 红黑树(JDK 1.8+,链表过长时转换)。


树与红黑树

普通 BST 可能退化,红黑树保证 O(log n):

退化的 BST(已排序数据):
  1
   \
    2
     \
      3    ← O(n) 查找

红黑树(自动平衡):
      2
     / \
   1    3    ← O(log n) 查找

TreeMap 底层是红黑树,查找/插入/删除都是 O(log n)。


堆是一种「部分有序」的完全二叉树:

最小堆:
        1
       / \
      2   3
     / \ / \
    4  5 6  7

出堆顺序:1, 2, 3, 4, 5, 6, 7  ← 永远先出最小的

PriorityQueue 底层是堆,实现优先级队列。


集合与数据结构对应

集合底层数据结构
ArrayList动态数组
LinkedList双向链表
HashMap哈希表 + 链表/红黑树
LinkedHashMapHashMap + 双向链表
TreeMap红黑树
HashSetHashMap
LinkedHashSetLinkedHashMap
TreeSetTreeMap
PriorityQueue

总结

要点说明
数组随机访问最快,插入删除需移动元素
链表头尾操作最快,随机访问需遍历
哈希表O(1) 查找,但需处理冲突
红黑树O(log n) 查找,有序
优先级队列,最值操作 O(1)

相关链接

基于 VitePress 构建