基础的数据结构

简介: 线性结构包括动态数组、链表、栈和队列,适用于顺序存储与操作。非线性结构如优先级队列、哈希表、红黑树、跳表和B+树,适用于复杂数据组织与高效查找。不同结构适用于不同场景,如HashMap适合快速查找,B+树用于数据库索引。

线性结构

动态数组:可以扩容,连续存储( ArrayList)

链表:不连续存储,有当前节点,才能找到相邻节点(linkedlist)

:先进后出,常用方法pop(出栈) push(入栈)peek(栈顶获取)linkedlist

队列:先进先出, linkedlist实现的是双端队列,常用方法:addfirst,addlast,标准队列off队尾添加。poll队头移除

非线性结构:

优先级队列: 保证优先级高的先出队,实现方式小顶堆(优先级小的都是根节点),或者大顶堆(优先级高的都是根节点)适合流式数据的处理(流式数据:无结束点,持续性)

hash表 key-value结构,根据key生成hash码存储数据value,适合数据的快速查找,实现有 HashMap(初始链表+数组,链表长度大于8数组长度大于64转化为红黑树,单线程首选),Hashtable(线程安全,效率低下)

红黑树:自平衡的二叉查找树,相对线性结构性能较好, TreeMap 属于红黑树

跳表:多级链表结构,链表上有多层索引,层级随机,比红黑树实现简单,性能差不多 。java 中的 ConcurrentSkipListMap 用跳表结构实现,redis 中的 SortedSet 也是用跳表实现

B+ 树:可以自平衡的 N 叉查找树。关系型数据库的索引常用 B+ 树实现

相关文章
|
Kubernetes 负载均衡 应用服务中间件
kubernetes—Ingress详解
kubernetes—Ingress详解
468 0
|
12月前
|
SQL XML 安全
初识MP
本文介绍了 MyBatis-Plus 在复杂应用中的使用技巧,涵盖条件构造器(如 QueryWrapper、UpdateWrapper 及其 Lambda 表达式版本)、自定义 SQL 的优化方式,以及分页和多表查询的处理方法。重点比较了 LambdaQueryWrapper 与 QueryWrapper 的适用场景,推荐单表操作优先使用 Lambda 方式以提升类型安全性,而多表联查则更适合使用 QueryWrapper 的灵活性。同时,通过示例说明了如何结合 Wrapper 与自定义 SQL 来构建高效、可维护的数据库操作逻辑。
|
Linux Python
LINUX These critical programs are missing or too old: compiler python
LINUX These critical programs are missing or too old: compiler python
1664 0
LINUX These critical programs are missing or too old: compiler python
|
4月前
|
人工智能 自然语言处理 数据可视化
白嫖7000万Tokens!阿里云百炼新用户专享,零成本玩转通义千问等70+大模型
阿里云百炼新用户专享:开通即赠超7000万Tokens!百炼官网:https://t.aliyun.com/U/fPVHqY 零门槛、免绑卡,可免费调用通义千问等70+主流大模型,支持AI编程、智能客服、内容创作等场景,价值数百元,有效期90天。
1755 2
|
机器学习/深度学习 数据采集 存储
大模型微调知识与实践分享
本文详细介绍了大型语言模型(LLM)的结构、参数量、显存占用、存储需求以及微调过程中的关键技术点,包括Prompt工程、数据构造、LoRA微调方法等。
3150 72
大模型微调知识与实践分享
|
存储 Prometheus 运维
All in One:Prometheus 多实例数据统一管理最佳实践
当管理多个Prometheus实例时,阿里云Prometheus托管版相比社区版提供了更可靠的数据采集和便捷的管理。本文比较了全局聚合实例与数据投递方案,两者在不同场景下各有优劣。
63896 125
|
前端开发 JavaScript Java
【前端技术】 ES6 介绍及常用语法说明
【前端技术】 ES6 介绍及常用语法说明
395 4
|
SQL Shell 数据库
MSSQL绕过微软杀毒提权案例
MSSQL绕过微软杀毒提权案例
808 0
|
JavaScript 安全 前端开发
什么是同源策略
什么是同源策略
553 0
|
安全 数据挖掘 程序员
程序员必读 | 《业务架构解构与实践》
程序员必读 | 《业务架构解构与实践》
1330 0