面试官:Hash 碰撞是什么?如何解决?被问懵了……

news/2024/5/6 2:02:39/文章来源:https://www.cnblogs.com/javastack/p/16771805.html

Hash如何存数据

hash表的本质其实就是数组,hash表中通常存放的是键值对Entry。

如下图:

这里的学号是个key,哈希表就是根据key值来通过哈希函数计算得到一个值,这个值就是下标值,用来确定这个Entry要存放在哈希表中哪个位置。

Hash碰撞

hash碰撞指的是,两个不同的值(比如张三、李四的学号)经过hash计算后,得到的hash值相同,后来的李四要放到原来的张三的位置,但是数组的位置已经被张三占了,导致冲突。

解决方法

hash碰撞的解决方式是开放寻址法和拉链法。

开放寻址法指的是,当前数组位置1被占用了,就放到下一个位置2上去,如果2也被占用了,就继续往下找,直到找到空位置。

拉链法采用的是链表的方式,这个时候位置1就不单单存放的是Entry了,此时的Entry还要额外保存一个next指针,指向数组外的另一个位置,将李四安排在这里,张三那个Entry中的next指针就指向李四的这个位置,也就是保存的这个位置的内存地址。如果还有冲突,就把又冲突的那个Entry放到一个新位置上,然后李四的Entry指向它,这样就形成一个链表。

总结起来:开放寻址法和拉链法都是想办法找到下一个空位置来存发生冲突的值。

更多 Java 教程:https://www.javastack.cn/java/

来源:blog.csdn.net/zsyoung/article/details/114505480

近期热文推荐:

1.1,000+ 道 Java面试题及答案整理(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_20536.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你真的了解SQL中的EXISTS谓词吗?

EXISTS 谓词的用法 支撑 SQL 和关系数据库的基础理论主要有两个:一个是数学领域的集合论,另一个是作为现代逻辑学标准体系的谓词逻辑(predicate logic),准确地说是“一阶谓词逻辑”。EXISTS 是为了实现谓词逻辑中“量…

管理系统权限总结

概念 功能权限和数据权限。 功能权限:用户是否能打开某一个网页,是否能点击编辑按钮等。数据权限:用户可以使用的数据范围。 用户 应用系统的具体操作者,用户可以自己拥有权限信息,可以归属于0~n个角色&…

使用VSCode连接远程服务器

1 效果展示 最近在使用云服务器开项目,发现VSCode的remote插件能远程连接服务器进行开发,这样就非常方便了。效果如下: 可以看到,这样操作,使得云端开发和本地开发几乎没什么不同,如果是云服务器就更方便了…

Vue脚手架报错:‘v-model‘ directives require no argument 解决方案

1、报错: v-model directives require no argument 截图 2、原因: ESLint对vetur进行了eslint检查 3、解决方法 ① 修改模板中使用v-show 将 v-model:show"show" 改为 v-model"show" ② vetur插件的作者给出了解决办法 我们可…

20201306吴龙灿第三章学习笔记

目录Ⅰ知识点归纳1.进程的概念什么是进程?进程的特征动态性并发性独立性异步性结构性程序和进程主要区别2.多任务处理系统(1)背景(2)多任务处理系统代码介绍3.进程同步(1)同步(2)进程唤醒与睡眠无效唤醒A 进程:B 进程:避免无效唤醒A 进程:Linux 内核的例子Ⅱ实践内容与…

docker jenkins升级以及失败处理

一、概述 jenkins是由docker安装的,目前的jenkins版本为2.356。然后jenkins右上角提示版本升级 点击了升级,升级完成后,需要重启一下。 然后就芭比Q了,访问jenkins出现504错误。查看docker日志,提示需要jdk升级到1.8。默认的jenkins的jdk版本为1.7,然后docker就开始一直…

督办管理系统——让企业工作落实到位

开展督查督办工作是企业在经营管理过程中的重要环节和管理手段,是企业办公室系统政务服务的一项重要工作。其具有间接性、权威性、实效性等特点。要加强企业督查督办工作,必须思想认识到位,充分把握督查督办工作原则;制度建设到位&#xff0c…

linux NTP同步时间后比实际时间慢8小时

1. issue ntp同步时间后比实际时间慢8小时 2. analysis 查询系统当前的时区设置 date -R,看到系统是 0000 时区,而中国统一采用北京所在的东8时区,由此造成了8小时的时间偏差。 3. solution 将PC ubuntu /usr/share/zoneinfo/Asia/Shanghai…

Django定义路由_子路由_函数视图

Django定义路由什么是路由,怎么去定义路由?添加路由Path 函数路由定义的痛点处理路由中的动态参数什么是路由,怎么去定义路由? 通常在我们创建项目包中,有个url.py的文件,我们需要去定义路由信息&#xff…

二叉树专项训练LeetCode

144. 二叉树的前序遍历 二叉树入门 递归 与 迭代 class Solution {List<Integer> ans new ArrayList<>();void dfs(TreeNode root){if(root null) {return;}ans.add(root.val);dfs(root.left);dfs(root.right);}public List<Integer> preorderTraversal(T…

【Golang开发面经】蔚来(两轮技术面)

文章目录一面1. channel 缓冲与非缓冲2. mysql引擎3. 索引如何建立&#xff1f;4. linux 如何看进程5. redis 字符串的底层6. 线程池理解7. 线程池的拒绝策略8.悲观锁&#xff0c;乐观锁9. HTTP 各个版本的区别10. HTTP2.0之前怎么实现服务器推送机制&#xff1f;11. websocket…

[操作系统] 启动

启动 一、通电 由于内存是随机存储器&#xff08;Random access memory&#xff0c;RAM&#xff09;&#xff0c;属于易失性存储器&#xff0c;未通电时&#xff0c;RAM中不会有任何内容&#xff0c;因此刚一通电&#xff0c;RAM不可能有任何实际信息。计算机硬件厂商在只读存…

信创浪潮下,看看大公司是如何建立数据安全保护体系的?

信创&#xff0c;即信息技术应用创新产业&#xff0c;它是数据安全、网络安全的基础&#xff0c;也是新基建的重要组成部分。信创涉及到的行业包括IT基础设施&#xff1a;CPU芯片、服务器、存储、交换机、路由器、各种云和相关服务内容&#xff0c;基础软件&#xff1a;数据库、…

1.ROS机器视觉:单目摄像头的调用与标定

(1条消息) ROS改错&#xff1a;vm虚拟机中调用摄像头失败_机械专业的计算机小白的博客-CSDN博客https://blog.csdn.net/wzfafabga/article/details/127204106?spm1001.2014.3001.5502 首先保证摄像头是可调用的。 1.安装usb_cam驱动 sudo apt-get install ros-melodic-usb-…

数据导入导出功能的测试点

【数据导入功能】 一、操作按钮校验 1、导入按钮生效 2、取消导入按钮生效 二、导入模板校验 1、文件数量 1&#xff09;不传模板&#xff1a;点确认时提示错误 2&#xff09;传模板&#xff1a;只支持单文件 or 还支持多文件同时导入 2、文件格式 只支持xlsx文件 or 还支…

HTML学生个人网站作业设计 学生大学生活网页设计作品 学生个人网页模板 简单个人主页成品 div+css个人网页制作

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

Java项目:ssh网上便利店系统

作者主页&#xff1a;夜未央5788 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该项目分为前后台。非maven项目&#xff1b; 前台主要功能包括&#xff1a; 会员登录、注册、商品展示、加入购物车、会员中心、我的订单、我的地址…

【跟学C++】C++队列——queue类(Study13)

文章目录1、队列2、队列--queue类的使用2.1 实例化queue2.2 queue的成员函数3、优先级队列--priority_queue类的使用3.1 实例化priority_queue3.1 priority_queued的成员函数4、总结 【说明】 大家好&#xff0c;本专栏主要是跟学C内容&#xff0c;自己学习了这位博主【 AI菌】…

多测师肖sir_高级讲师_第2个月第21讲解jmeter安装

一、安装流程&#xff1a; 1、安装jdk &#xff08;linux&#xff0c;windows上&#xff09;&#xff0c;jdk编译java语言&#xff0c; 2、jdk环境配置&#xff0c;dos中java -version 查看jdk版本 3、下载jmeter包&#xff0c;解压&#xff0c;bin 目录 &#xff0c;jmeter.ba…

从零开始配置vim(25)——关于 c++ python 的配置

从9月份到国庆这段时间,因为得了女儿,于是回老家帮忙料理家事以及陪伴老婆和女儿。一时之间无暇顾及该系列教程的更新。等我回来的时候发现很多小伙伴私信我催更。在这里向支持本人这一拙劣教程的各位小伙伴表示真诚的感谢。言归正传,让我们开始吧 之前我们根据lua语言配置了…