【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 扩容时会根据新容量重新确定每个元素的存放位置;

相关推荐
香蕉大香蕉(06敬畏市场)5 分钟前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
LaughingZhu20 分钟前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
_冷眸_27 分钟前
Python 调用大模型 API:最小请求、Base URL 和 401/404 排查
开发语言·人工智能·python
niucloud-admin38 分钟前
NIUCLOUD PHP SAAS上门家政使用文档:服务保障
java·开发语言·php
IT枫斗者枫哥1 小时前
CompletableFuture失败后返回空列表:异常没了,业务含义也变了
java·后端
知识搬运临时工1 小时前
一个模板把 AEM 拖进 Full GC 死亡螺旋:300% CPU、7 GB 堆、310 万行堆栈
java·aws
熊猫钓鱼>_>1 小时前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
用户432935928051 小时前
CoAP还是MQTT:1万只Cat.1水表三个月带宽续航实测
java
知守观1 小时前
多模块架构演进:横向分层 vs 纵向领域,13 个真实项目的切分对照
java·后端·微服务
Ai-_Man1 小时前
Coze扣子还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·1024程序员节