散列/哈希算法 冒泡排序 求最大值

本文介绍了散列算法的基本概念,包括散列函数的工作原理及其不可逆性。解释了哈希碰撞产生的原因及处理方法,并详细说明了Java中哈希表和hashcode的作用与实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

散列算法/函数:散列函数使得不同长度的输入消息,产生固定精简长度的输出,这个固定长度的输出称为原输入消息的散列或消息摘要。

不可逆性:由于散列值/哈希值是源数据的信息摘要,而不是压缩,因此无法通过哈希值/散列值找到源数据。

 哈希碰撞的产生:

比如说有5个数 12,25,30,45,50,这几个数有个规律,就是十位数都不相同,如果我设置一个散列函数f( value)=value/10;平常的时候,我们查找50,要比较5次(其他算法可能不同),这里用散列算法只需要1次,就是解散列函数,key=50/10=5,要找的数就在第5个位子.
但是上面问题还是很多的,比如说查找55呢?就会出错<因为55解 散列函数之后,也是在第5个位子>,还有等等等问题,很显然这个是我散列函数没设置好,当你把散列函数设置好了后,由于数据的庞大,冲突很有可能产生,那么就需要我们来处理冲突了,所以写散列算法就是设置好的散列函数和处理冲突的过程.这里散列算法涉及的查找就跟查找的数量无关,跟冲突率有直接的关系。

java里的哈希表和hashcode:public int hashCode()返回该对象的哈希码值

hashcode:jdk会给每个对象的地址计算出一个hashcode,再将关键字映射到hashcode,这样的话查找元素时直接根据关键字来找到地址对应的hashcode

我们知道有哈希碰撞存在的可能,那么两个对象的地址经过哈希算法可能对应着相同的hashcode,所以哈希表的唯一性除了先用hashcode比较外还需用equals方法比较内容。

哈希碰撞的解决:

 

转载于:https://www.cnblogs.com/jianmianruxin/p/7233031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值