【java入门到放弃】数据结构

1、线性数据结构

1.1、数组(Array)

1.2、链表(Linked List)

单链表
双向链表
循环链表

1.3、栈

1.4、队列

普通队列
循环队列
双端队列

2、非线性数据结构

2.1、树

2.1.1、普通树

特点:一个节点可以有任意多个子节点

算法重点:

DFS:Depth First Search(深度优先搜索)。树的先序遍历,是DFS的一种实现。

BFS:Breadth First Search(广度优先搜索)。就是 层序遍历。

2.1.1.1、B+ 树

数据库使用这个B+树。一种多路平衡搜索树(多个子节点,树的高度始终保持很低 不会退化成链表,节点里的 key 有序)。优点是磁盘IO少,有 双向链表 范围查询快

B+ 树的定义:

  • 一个节点可以有多个子节点
  • 子节点个数 = 阶(order)
    • 比如:3 阶、4 阶、100 阶......
  • 所有数据都存放在 叶子节点
  • 叶子节点之间 用链表相连(双向链表)

mysql中,一般只有2到4层。

数据存储:B 树,内部 + 叶子。B+ 树,只在叶子

类型 叶子节点存储 数据顺序 查询效率特点
聚簇索引 整行数据 与索引顺序一致 范围查询快,唯一聚簇
二级索引 索引列 + 主键 与索引顺序不一致 单点查找快,但回表有开销

聚簇索引一般是主键。物理顺序只能有一个 ,所以 只能一个聚簇索引

2.1.2、二叉树
2.1.2.1、平衡二叉树

定义:

  • 任意节点左右子树的高度差 ≤ 1
2.1.2.2、二叉搜索树

定义:

  • 左子树所有节点值 < 根节点
  • 右子树所有节点值 > 根节点
2.1.2.3、完全二叉树

定义:

  • 除最后一层外,其余层都是满的
  • 最后一层节点 从左到右连续排列
2.1.2.4、红黑树

红黑树是一种自平衡二叉搜索树,但它不是"高度严格平衡"的

1、每个节点非红即黑

2、根节点是黑色

3 、叶子节点(NIL,空节点)是黑色

4、 红色节点不能连续(红节点的子节点必须是黑)

5、 从任意节点到其所有后代 NIL 节点的黑节点数相同(黑高一致)

2.1.2.5、堆

1、结构性(Structure Property)

  • 必须是 完全二叉树
  • 最后一层从左到右依次填充

2、 堆序性(Heap Property)

  • 每个节点都满足:
    • 大顶堆:parent ≥ children
    • 小顶堆:parent ≤ children

2.2、图

图 = 顶点(Vertex) + 边(Edge)

  • 顶点(V):点、节点
  • 边(E):连接顶点的关系

表示为顶点集边集。顶点集不能为空,边集可以为空。

分类:

无向图,有向图

无权图,带权图

3、散列结构

3.1、哈希表

哈希表是一种通过哈希函数将 Key 映射到数组下标,从而实现快速存取的数据结构。

key → hashCode → index。再把value和key,一起绑定到index。

在 Java JDK 8+ 的 HashMap 中:

参数 默认值
初始容量 16
负载因子 0.75,大于12时,才扩容
链表 → 树 8,大于8时,才变红黑树,还要容量不小于64
树 → 链表 6,小于6时,才变链表
树化最小容量 64,容量不小于64,链表才会开始变树

扩容规则就是:容量 × 2(翻倍)

HashMap 扩容时会根据新容量重新确定每个元素的存放位置;

相关推荐
SeaTunnel1 分钟前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影16 分钟前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
奋发向前wcx31 分钟前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
Marst Code1 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121311 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
CRMEB系统商城2 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience3 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao4 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099674 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
爱喝水的鱼丶4 小时前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv