Java常见的8种数据结构

Java常见的8种数据结构一、线性结构:数组、链表、哈希表;队列、栈1.数组:2.链表:3.哈希表:4.队列:先进先出5.栈:先进后出数据结构优点缺点数组查找快增删慢链表增删快查找慢哈希表增删、查找都快数据散列,对存储空间有浪费栈顶部元素插入和取出快除顶部元素外,存取其他元素都很慢队列

大家好,欢迎来到IT知识分享网。

一、线性结构:数组、链表、哈希表;队列、栈

 1.数组:

 2.链表:

 3.哈希表:

 4.队列:先进先出

 5.栈:先进后出

数据结构 优点 缺点
数组 查找快 增删慢
链表 增删快 查找慢
哈希表 增删、查找都快 数据散列,对存储空间有浪费
顶部元素插入和取出快 除顶部元素外,存取其他元素都很慢
队列 顶部元素取出和尾部元素插入快 存取其他元素都很慢
二叉树 增删、查找都快 删除算法复杂
红黑树 增删、查找都快 算法复杂
位图 节省存储空间 不方便描述复杂的数据关系

 

 

 

 

 

 

 

 

 二、非线性结构有:堆、树(二叉树、B树、B+树、红黑树)

1.二叉树分类

  时间复杂度最好情况是O(logn) ,最坏情况下时间复杂度O(n)

  1)满二叉树:如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。

  Java常见的8种数据结构

  2)完全二叉树:如果一个二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

  Java常见的8种数据结构

       3)二叉查找树:左子树上的值都比其根节点小,右子树上的值都比其根节点大。

     二叉查找树的中序遍历一定是从小到大排序的。

  Java常见的8种数据结构

  4)平衡二叉树(红黑树)是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

    平衡二叉树必须是二叉查找树

       性能:平衡二叉树在添加和删除时需要进行复杂的旋转保持整个树的平衡,最终,插入、查找的时间复杂度都是 O(logn),性能已经相当好了。

    Java常见的8种数据结构

   5)最优二叉树(哈夫曼树): 树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。

    哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。应用:哈夫曼编码。

Java常见的8种数据结构

2.红黑树是一种自平衡二叉查找树。应用内存排序。

插入和删除的最坏的时间复杂度是O(log N) 。

红黑树左旋和右旋的目的是为了自平衡。

参考:1.红黑树、B+树 2.红黑树在什么时候左旋 右旋 如何旋转

  1)每个节点非红即黑;

  2)根节点是黑的

  3)每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的;

  4)如果一个节点是红的,那么它的两儿子都是黑的;

  5)对于任意节点而言,其到叶子点树NULL指针的每条路径都包含相同数目的黑节点;

  6)高度始终保持在h = logn

  7)红黑树的查找、插入、删除的时间复杂度最坏为O(log n)

Java常见的8种数据结构

 2.1 变色规则  红黑树使用红黑二色进行“着色”,目的是利用颜色值作为二叉树的平衡对称性的检查。
 当前结点的父亲是红色,且它的祖父结点的另一个子结点也是红色(叔叔结点):
(1)把父节点设为黑色
(2)把叔叔也设为黑色
(3)把祖父也就是父亲的父亲设为红色(爷爷)
(4)把指针定义到祖父结点设为当前要操作的(爷爷)分析的点变换的规则
 这里我们新插入一个值 6 ( 插入的节点都是红色的 所以 6 是红色的节点 ) ,变色后的图形。

红黑树的创建:节点的初始颜色为红色。

Java常见的8种数据结构

 2.2 左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。

Java常见的8种数据结构

Java常见的8种数据结构

 2.3 右旋:以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。

Java常见的8种数据结构

Java常见的8种数据结构

 2.4 红黑树查找:和二叉平衡树的查找一样

3.B树(多叉树):平衡多路查找树(查找路径不只两个),不同于常见的二叉树,它是一种多叉树。O(logN)

Java常见的8种数据结构

4.B+树:是一种自平衡树数据结构,它保持数据排序;在进行搜索、顺序访问、插入和删除的复杂度是O(log n)且B+树只在叶子节点中存放数据,所以消除了一些B树的缺陷。非叶子节点只保存索引,不保存实际的数据,数据都保存在叶子节点中。O(nlogn)

 Java常见的8种数据结构

 4.1 B+树查找:树的高度低,支持范围查找

 4.2 mysql为什么采用B+树

  1)磁盘IO的次数更少

  2)支持范围查找

 4.3 B树与B+树的区别

  1)B+树所有数据都存在叶子节点
  2)B+树的叶子节点有双向指针,方便范围查找,且叶节点上的数据从小到大顺序连接

三、图(对现实世界建模)

 

四、mysql

 1.mysql底层数据结构:B+树

   1.1 索引的最左前缀原则:mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先。

   1.2 explain(sql执行计划):避免全表扫描,尽量走索引。

  1) type: system > const > eq_ref > ref > range(范围) > index(索引) >  all (性能好->差)

  2.Mysql锁与事务隔离级别

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27820.html

(0)
上一篇 2023-09-18 10:33
下一篇 2023-09-18 21:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信