• Java常见的8种数据结构


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

     1.数组:

     2.链表:

     3.哈希表:

     4.队列:先进先出

     5.栈:先进后出

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

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

    1.二叉树分类

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

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

      

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

      

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

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

      

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

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

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

        

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

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

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

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

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

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

      1)每个节点非红即黑;

      2)根节点是黑的

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

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

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

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

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

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

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

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

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

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

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

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

     

     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锁与事务隔离级别

  • 相关阅读:
    the schema version of 'microsoft.aspnet.mvc' is incompatible with version of nuget
    ODBC连接到400
    PC端使用program來CHGUSRPRF
    Could not load file or assembly 'System.Data.SQLite' or one of its dependencies. An attempt was made
    编辑器,按钮等等,图片上传到服务器的原理-----图片上传预览原理及实现
    dedecms,ajax提交,前端验证,前端提示,以及30秒后再提交
    js提交表单的时候,30秒后才能提交第二次
    z-dialog下载,以及使用教程---下载zdialog以后,有案例,那里才是官方最全的教程
    Resource interpreted as Stylesheet but transferred with MIME type application/javascript
    dedecms ajax表单提交,以及如何返回json的数据,以及数组的写法
  • 原文地址:https://www.cnblogs.com/wenxiangchen/p/16594670.html
Copyright © 2020-2023  润新知