面试官问你什么是Hash表
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表相关推荐
- 面试官问:select......for update会锁表还是锁行?
欢迎关注方志朋的博客,回复"666"获面试宝典 select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁 ...
- 面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么?
以下文章来源方志朋的博客,回复"666"获面试宝典 最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,导致数据增长过快,磁盘占用多. 为了节约成本,定期进行数 ...
- 面试官问面向对象特点_最好的面试官有什么共同点?
面试官问面向对象特点 by Aline Lerner 通过艾琳·勒纳(Aline Lerner) 最好的面试官有什么共同点? 我们查看了成千上万的真实访谈以找出答案. (What do the bes ...
- 【240期】面试官问:说说基于 Redis 实现延时队列服务?
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...
- 面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者 | 松若章 来源 | https://zhuanlan.zhihu.com/p/6142 ...
- 当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮
前言 今天介绍一下Java的两个集合类,ArrayList和LinkedList,这两个集合的知识点几乎可以说面试必问的. 对于这两个集合类,相信大家都不陌生,ArrayList可以说是日常开发中用的 ...
- java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...
- eureka自我保护时间_阿里面试官问我:到底知不知道什么是Eureka,这次,我没沉默...
文章首发:阿里面试官问我:到底知不知道什么是Eureka,这次,我没沉默 什么是服务注册? 首先我们来了解下,服务注册.服务发现和服务注册中心的之间的关系. 举个形象的例子,三者之间的关系就好像是供货 ...
- sql参数化还是被注入了_面试官问你 SQL 注入攻击了吗?
目录 为什么要聊 SQL 注入攻击? 什么是 SQL 注入攻击? 如何进行 SQL 注入攻击? 如何防范? 常见面试题 瞎比比 为什么要聊 SQL 注入攻击? 我这人有个想法,就是不管自己跳不跳槽,每 ...
最新文章
- Hyper-v Server重复数据删除技术
- sepFilter2D函数
- Imageloader8-压缩图片
- 自然语言处理----处理原始文本
- leetcode 110 --- 判断给定的二叉树是否是平衡二叉树
- T-SQL字符串相加之后被截断的那点事
- 遇见 | 大咖:对话Oracle北美数据库研发领袖,你来不来?
- HDU1715 大菲波数【大数】
- 浅析ISO三体系标准认证对企业的作用
- 基于Ubuntu虚拟机的Linux驱动开发入门
- 王阳明的智慧:如何让职场从“举步维艰”到“平步青云”?
- Linux网卡驱动分析
- ubuntu ogv
- android 获取默认字体,Android默认字体
- Torvalds的linux
- SWUSTOJ #954 单链表的链接
- listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖
- python计算线段夹角
- MATLAB中向量场的可视化
- 毕业设计-基于微信小程序的图书馆座位预约系统