Skip to content

数据结构与算法技术栈总览

一句话定位:数据结构 = 数据的组织方式(线性/树/图),算法 = 对数据的操作(排序/查找/哈希)。面试主线:线性表与哈希表(栈/队列/链表/散列 + 冲突解决)、(二叉树 → 平衡 → B/B+ 树)、排序与查找(冒泡/选择/快排 + 二分 + 一致性哈希)。

数据结构地图

大类结构核心特性
线性表LIFO(后进先出),push/pop
线性表队列FIFO(先进先出),offer/poll
线性表链表插入删除快、遍历慢
散列表哈希表O(1) 查找,靠散列函数 + 冲突解决
二叉树/完全/满/平衡/红黑树概念卡片:树
B树/B+树/LSMB+ 支持范围查询,LSM 减少随机 IO
有向/无向BFS/DFS 遍历

算法地图

大类算法复杂度
排序冒泡排序O(n²)
排序选择排序O(n²)
排序快速排序平均 O(nlogn),最坏 O(n²)
查找二分查找O(log n),需有序
哈希一致性哈希节点增减只重定位小部分数据

Java 集合框架映射

接口实现类底层
ListArrayList(数组,随机访问快)动态数组
ListLinkedList(双向链表,插入删除快)链表
ListVector(线程安全)数组 + synchronized
SetHashSet哈希表(HashMap 的 key)
SetTreeSet红黑树
MapHashMap哈希表(JDK1.8 起 + 红黑树)
MapConcurrentHashMap分段锁/CAS(线程安全)

不变量(必须成立的约束)

  • 栈 LIFO、队列 FIFO、哈希 O(1)、树 O(log n)(平衡时)。
  • 哈希表 O(1) 是平均复杂度,冲突严重时退化。
  • 二分查找前提是有序,且 mid 计算要防溢出(low + (high-low)/2)。

常见误解

  • 以为「ArrayList 就是链表」→ 是数组实现的动态数组(名字误导)。
  • 以为「哈希查找永远 O(1)」→ 冲突严重会退化,需控制装填因子。
  • 以为「B+ 树和 B 树一样」→ B+ 非叶节点只存索引、叶子存全部数据且链表相连,故支持范围查询。

关联

最近更新