android-从本质层面了解数据结构与算法

天津唐秙 天津唐秙     2022-12-02     313

关键词:

从本质层面了解数据结构与算法

技术点

  1.计算机存储单元与存储结构分析
  2.算法与数据结构的关系
  3.基础存储单元与连续存储单元
  4.ArrayList与LinkedList结构分析
  5.HashMap底层存储原理详解
  6.Hash算法详解与Hash冲突
  7.HashMap头插法与尾插法的优缺点
  8.HashMap导致100%CPU解密

容器与结构

  数据结构是计算机存储、组织数据的方式。数据结构是指相互之间一种或多种特定关系的数据元素的集合,通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率,数据结构往往同高效的检索算法和索引技术相关。
  本质:容器的设计规则
  用处:运行效率的提升
  程序系统中基础容器提供了两个变量和数组,变量是单个存储的介质,硬件中就是1010101,内存或者磁盘上的表示形式就是一堆的地址指向某一组空间。当我们出现一定的业务场景出现,系统提供的两种容器不能满足我们,所以需要做出一些额外的容器。
  我现在要接受一个消息,但是我不知道消息的数据量多大,也不知道接受的数据类型,可能有多种。

容器类别与结构本质

在Java中实际的数据容器有两种
  1.基本存储单元(单个数据存储,包含两块基本数据类型,对象)
  2.连续数据存储(数组)
数组=Java提供出来的数据结构
数据结构的特种:
  1.对于数据类型设计
  2.对于数据存储与提取设计
  3.对于数据物理结构设计
数据结构的本质是一个管理类他是对于上面三点的一个维护

ArrayList

优点和缺点:
效率
  查询:用空间去换时间,一次性先把你要的空间给你,查询的时候使用下标,一步到位
  增删改:增删改方便,一旦超过容量,需要进行复制数组,如果要在整个记录中进行插入,后面的数据都要跟着动
关于数据结构算法效率:
  时间复杂度:
  空间复杂度:
  加大空间的消耗,换取运算速度的提升
  加大运算速度的消耗,换取存储性能的提升

LinkedList

  思路:我选择用单个存储,变量,想要变成一组数据有序,那么需要逻辑控制,双链表在单链表的基础上,在每组变量的引用中多了一组引用,一组引用占位32位空间,在增删改的时候速度快,但是查询慢。
效率

HASH表


  综合一下,用数组解决查询慢的问题,底层还是用链表对数据进行存储,空间不用开辟,用多少开多少,不浪费。
  HashMap底层hash表,通过k-v,因为内存地址或者是磁盘地址,在计算机中是唯一的,底层的话对于地位的截取采用的方式不是取模,而是通过&运算,依照上面这个结果,必须做出妥协,妥协是数组的长度必须是2的幂次方-1。

HashMap死环问题

  HashMap每次扩容都是2倍,为了保持2的幂次方,为了妥协数组长度

1.7版本问题最大的地方

进行一次扩容之后,里面的数据会进行一次颠倒

hashMap中存在死环问题:
  死环问题的产生是,头插法会调换两个对象的引用位置,如果存在另一个对他进行提前更改,会出现死环

  1.8的HashMap
  将哈希值向右移动了16位,产生一个高位和低位,

HashMap问题:
1.为什么扩容是两倍扩容?
  因为2的幂次方,一定程度上解决了hash冲突,但是并没有完全解决,没有完全解决的方案
2.为什么出现死环,怎么解决?
  因为头插法会出现,完成数据替换后,前后顺序颠倒,如果出现线程切换问题,造成相互引用,出现死环
  1.8解决方案:不进行头插,同时加入高低位,在结束后,断掉末尾,高低位分开插入
3.为什么用异或?
  解决哈希冲突

总结

数据结构本质:
   一个管理类

计算机提供出来的计算单位:
   变量,数组

android-从本质层面了解数据结构与算法

从本质层面了解数据结构与算法技术点  1.计算机存储单元与存储结构分析  2.算法与数据结构的关系  3.基础存储单元与连续存储单元  4.ArrayList与LinkedList结构分析  5.HashMap底层存储原理详解  6.Hash算法详解与Hash... 查看详情

程序与算法

...问题而存在从本质上而言,程序是解决问题的步骤描述。数据结构起源 计算机从解决数值计算问题到解决生活中的问题 现实生活中的问题涉及不同个体间的复杂联系 需要在计算机程序中描述生活中个体间的联系 ... 查看详情

数据结构第一节递归

  分支转向是算法的灵魂;函数和过程及其之间的相互调用,是在经过抽象和封装之后,实现分支转向的一种重要机制;而递归这是函数和过程调用的一种特殊形式,即允许函数进行自我调用。  递归的价值在于,许多应用... 查看详情

编译原理学习随笔

...于这个问题十分复杂,其解决算法也相对复杂。我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了。 学习编译原理有什么好... 查看详情

数据加密算法--详解des算法原理与实现(代码片段)

...不是64位的倍数,可以按照某种具体的规则来填充位。从本质上来说,DES的安全性依赖于虚假表象,从密码学的术语来讲就是依赖于“混乱 查看详情

app测试与web测试的本质区别

单纯从功能测试的层面上来讲的话,APP测试、web测试在流程和功能测试上是没有区别的根据两者载体不一样,则区别如下:1、系统结构方面            web项目,b/s架构,基于浏览器的... 查看详情

机器学习需要了解的几个问题

...率,两者不可能同时高,怎么平衡?从算法本身还是业务层面?惊喜度怎么添加?  4.如何评价推荐系统的好坏?指标是啥?   机器学习:  1.能解决哪几类问题?(分类聚类回归预测?)每一类型会有哪些算法? ... 查看详情

数据结构与算法-数据结构概览

...也大多是和这两门语言相关。今天先来看看有哪些常见的数据结构(C++STL视角,其他应该也大同小异吧。哈哈,我猜的!)。所以之后的内容大多从STL出发,然后顺便对比下java中对应的数据结构。作为一名合格的软件开发人员,我... 查看详情

根据人类的学习与记忆过程来高效学习

...起来也有快两个月了,之前作为计算机工科生虽然算法和数据结构是必修课,但实际上只是停留在“理解”的层面,相当肤浅,更遑论举一反三灵活运用了。因此,所谓“正儿八经”学习算法,意即开始对算法思想... 查看详情

从汉诺塔问题来看“递归”本质

汉诺塔问题大二上数据结构课,老师在讲解“栈与递归的实现”时,引入了汉诺塔的问题,使用递归来解决n个盘在(x,y,z)轴上移动。例如下面的动图(图片出自于汉诺塔算法详解之C++):三个盘的情况:四个盘的情况:如果是... 查看详情

索引数据结构和算法

...了其工作原理之后,还有很多问题没有弄懂,比如底层的数据结构和算法,于是更进一步地从数据结构层面了解其工作原理。在网上搜了很多资料,发现没有很多介绍这方面的文章,后来找到了一本书,《这就是搜索引擎》,拜... 查看详情

了解用于切割树状图的 DynamicTreeCut 算法

...【问题描述】:树状图是一种与层次聚类算法一起使用的数据结构,它在树的不同“高度”处对聚类进行分组-其中高度对应于聚类之间的距离度量。从某些输入数据集创建树状图后,通常更难确定在哪里“切割”树状图,这意... 查看详情

hash表从了解到深入(浅谈)

...行Value化,再进行一个映射关系到Key直接进行访问的一个数据结构,这样可以通过直接的计算进行数据的访问和插入。关于Hash表的基本概念这里就不一一叙述,可以通过百度了解Hash的一些基本概念。今天这里主要讲2个点,Hash冲... 查看详情

从tcp拥塞本质看bbr算法及其收敛性(附cubic的改进/ncl机制)

...给出一些与BBR算法相关但却是其之外的东西。1.TCP拥塞的本质注意,我并没有把题目定义成网络拥塞的本质,不然又要扯泊松到达和排队论了。事实上,TCP拥塞的本质要好理解的多!TCP拥塞绝大部分是由于其”加性增,乘性减“... 查看详情

了解红黑树的起源,理解红黑树的本质(代码片段)

...本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识。你好,我是彤哥。前面两节,我们一起学习了关于跳表的理论知识,并手写了两种完全不同的实现,我们放一张图来简单地回顾一下... 查看详情

小猪的数据结构辅助教程——1.数据结构与算法绪论

小猪的数据结构辅助教程——1.数据结构与算法绪论标签(空格分隔):数据结构本节学习路线图与学习要点学习要点:1.了解数据结构的相关概念2.了解算法的相关概念3.熟悉时间复杂度的计算4.了解空间复杂度的概念,闰年表... 查看详情

数据结构与算法小结——排序

  前段时间Java学了,数据结构与算法看了,机器学习也了解了一点,还装上Ubuntu了解了Linux。接受的东西太多太杂,需要梳理一下。  首先是最重要的数据结构和算法,无论以后搞什么,只要是计算机方面的,都是在这基础... 查看详情

数据结构与算法三个经典案例带你了解动态规划(代码片段)

本系列文章【数据结构与算法】所有完整代码已上传github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接https://github.com/Lpyexplore/structureAndAlgorithm-JS我们在面对很多问题时,会通... 查看详情