开发中常见的数据结构汇总一览

对于数据结构和算法相关方面认知大概是在大学里,当时在学这门课时和大多数同学一样根本不知所措,根本没有察觉到这门课程对于后续工作中的影响,一直到工作多年的我其实到现在才开始体会到数据结构和算法的重要性

其实在这个信息时代也就是数据时代,各行各业每天都会产生着各种各样的数据,而数据结构其实就是用来囊括数据和数据之间的关系的,在信息时代如何让计算机为我们提供更好的服务,对于数据的处理尤为重要,这里我们说的数据结构其实就是计算机存储、组织数据的方式,而对于数据与数据之间的关系我们可以抽象出下图几种情况:
从图中我们可以看出四种关系:

  • 数据与数据无任何关系
  • 数据与数据一对一关系
  • 数据与数据一对多关系
  • 数据与数据多对多关系

世间万事万物都可以根据以上关系来进行划分关系,这里我们引出一个世界上著名的理论六度分离理论
而这个理论其实只是说明一个很重要的概念:任何两位素不相识的人之间,通过一定的联系方式,总能够产生必然联系或关系;其实这就跟我们上面所提出的数据与数据之前通过数据结构抽象后能够形成特定关系,这里我们引出这么多只是说明我们在计算机领域的逻辑上层也是通过此种抽象方式从而形成计算机中所需的对应的数据结构

下面是对于日常软件开发中我们可能碰到的或者需要知道的常用的数据结构及其特性的汇总。

数据结构结构特性分类实现(java)
数组线性结构支持随机访问
扩容需进行数据迁移
N/AArrayList、Vector动态数组
链表线性结构不支持随机访问
支持动态扩容
单链表、双向链表、循环链表、双向循环链表LinkedList
队列线性结构先进先出普通队列、双端队列基于数组的ArrayDeque双端队列
基于链表的ConcurrentLinkedDeque双端队列
线性结构先进后出基于数组顺序栈、基于链表链式栈Stack
跳表非线性结构基于多级索引的链表N/AConcurrentSkipListMap
散列表非线性结构基于散列(哈希)函数
散列冲突(链表法和开放寻址法)
无序散列表、有序散列表HashMap、LinkedHashMap
非线性结构一对多父子级关系
只有一个根节点
二叉树:完全二叉树、满二叉树、二分查找树、红黑树、trie树
多叉树:B树、B+树
堆:大堆顶、小堆顶
TreeMap、1.8后HashMap链表中转红黑树
非线性结构多对多关系(顶点和顶点之间)无向图、有向图、有向带权图N/A

上面列出的一系列数据结构我们都可以映射到之前列举的数据和数据之前的四种关系上例如:

  • 散列表的数据可以达到没有任何关系
  • 数据/链表/队列/栈中数据具有一对一的关系(我的前面和后面)
  • 树中父节点和子节点一对多关系
  • 图中顶点和顶点多对多关系

这一篇幅列所列举的只是我们日常开发中最常见的一些数据结构,通过这些对应的数据结构我们可以通过各类算法来满足对应的业务场景,在后面的文章我们再针对常用的一些算法进行梳理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值