Hash表(哈希表),也叫散列表,在这之前还以为这是两种数据结构呢,不知道为啥他俩能扯上关系,翻译了一波才知道,hash就是把……弄乱;斩碎的意思,这下明白名字的由来了。
由于数组的查询快,增删慢,而链表的增删快,而查询慢,于是出来了哈希表这种数据结构,吸取了数组和链表的优先。
在我们使用数组链表数据结构时,也就是实现通过一个key去查找value,对数组而言就是通过下标来找对应的值,对于链表而言,就是通过data里面存的key,来对应value。正是如此,所以数组的查找比较快,直接通过索引,而链表呢,就需要遍历链表,判断key,来获取value。而哈希表是通过数组的快速查询进行一个模糊的定位,然后再通过这个小范围去查找对应的value。

提取上图的一条链,方便下面讲解

核心思想
首先构造出这个数组,这里是0~15,通过除留余数法进行构造,如果一个key是26,26%16=10,所以这里把key为26的数据存入下标为10的链表里,这里是通过拉链法实现的,也就是数组的每一个元素都有一个指针执行一个链表,当有余数与该索引对应时,那么就把该元素的key和value存入链表里,如果我们在查询的时候,如果key是126,那么我们会找到下标为10的索引值,而这里对应了两个值,那么我们就需要对该链表进行遍历,看看哪个key是126,就取key是126的value,这样一来,查询的速度通过数组快速定位,增删也是通过数组快速定位,然后链表直接追加上。如果key是字符串,可以通过一些算法,进行数字化,然后存储进去。
多扯一点
到这里你可能会想到Map,对的就是Map,还有HashMap,是吧跟Hash扯上关系了,在JDK1.7之前,当找到一个数组下标后,就是通过遍历链表实现的,此时时间复杂度是O(n),但是在JDK1.8之后当链的长度大于等于8的时候,就把这个链表的实现改成了红黑树了,这样一来,就提高了找具体的key的效率,时间复杂度是Olog(n)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200325121055385.png

面试官问你什么是Hash表相关推荐

  1. 面试官问:select......for update会锁表还是锁行?

    欢迎关注方志朋的博客,回复"666"获面试宝典 select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁 ...

  2. 面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么?

    以下文章来源方志朋的博客,回复"666"获面试宝典 最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,导致数据增长过快,磁盘占用多. 为了节约成本,定期进行数 ...

  3. 面试官问面向对象特点_最好的面试官有什么共同点?

    面试官问面向对象特点 by Aline Lerner 通过艾琳·勒纳(Aline Lerner) 最好的面试官有什么共同点? 我们查看了成千上万的真实访谈以找出答案. (What do the bes ...

  4. 【240期】面试官问:说说基于 Redis 实现延时队列服务?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...

  5. 面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者 | 松若章 来源 | https://zhuanlan.zhihu.com/p/6142 ...

  6. 当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮

    前言 今天介绍一下Java的两个集合类,ArrayList和LinkedList,这两个集合的知识点几乎可以说面试必问的. 对于这两个集合类,相信大家都不陌生,ArrayList可以说是日常开发中用的 ...

  7. java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

  8. eureka自我保护时间_阿里面试官问我:到底知不知道什么是Eureka,这次,我没沉默...

    文章首发:阿里面试官问我:到底知不知道什么是Eureka,这次,我没沉默 什么是服务注册? 首先我们来了解下,服务注册.服务发现和服务注册中心的之间的关系. 举个形象的例子,三者之间的关系就好像是供货 ...

  9. sql参数化还是被注入了_面试官问你 SQL 注入攻击了吗?

    目录 为什么要聊 SQL 注入攻击? 什么是 SQL 注入攻击? 如何进行 SQL 注入攻击? 如何防范? 常见面试题 瞎比比 为什么要聊 SQL 注入攻击? 我这人有个想法,就是不管自己跳不跳槽,每 ...

最新文章

  1. Hyper-v Server重复数据删除技术
  2. sepFilter2D函数
  3. Imageloader8-压缩图片
  4. 自然语言处理----处理原始文本
  5. leetcode 110 --- 判断给定的二叉树是否是平衡二叉树
  6. T-SQL字符串相加之后被截断的那点事
  7. 遇见 | 大咖:对话Oracle北美数据库研发领袖,你来不来?
  8. HDU1715 大菲波数【大数】
  9. 浅析ISO三体系标准认证对企业的作用
  10. 基于Ubuntu虚拟机的Linux驱动开发入门
  11. 王阳明的智慧:如何让职场从“举步维艰”到“平步青云”?
  12. Linux网卡驱动分析
  13. ubuntu ogv
  14. android 获取默认字体,Android默认字体
  15. Torvalds的linux
  16. SWUSTOJ #954 单链表的链接
  17. listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖
  18. python计算线段夹角
  19. MATLAB中向量场的可视化
  20. 毕业设计-基于微信小程序的图书馆座位预约系统

热门文章

  1. [转]在SSIS中,使用“包配置”时的常见错误与解析
  2. F5 V9 利用SCCP实现带外管理及重装系统
  3. 学习C++的第一本书
  4. java8(2)--- Stream API
  5. WCF中配置文件解析
  6. MapReduce整体架构分析
  7. 转载 linux系统调用和库函数调用的区别
  8. awk编程基本使用示例
  9. javashop配置微信支付
  10. 前端防抖和节流合二为一