hashCode

9 篇文章 0 订阅

hashCode()

hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;
如果两个对象相同,就是适用于equals(Java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;
如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;
两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”

​ hashCode是用于查找使用的,而equals是用于比较两个对象的是否相等的

解决hash碰撞方法

https://blog.csdn.net/lppl010_/article/details/80839160

开放定址法

当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中,通用的再散列函数形式:
Hi=(H(key)+di)% m i=1,2,…,n
其中H(key)为哈希函数,m 为表长,di称为增量序列

增量序列的取值方式不同,相应的再散列方式也不同
线性探测再散列
二次探测再散列
伪随机探测再散列

再哈希法

​ 同时构造多个不同的哈希函数:
H i = R H 1 ( k e y ) i = 1 , 2 , … , k 当 哈 希 地 址 H i = R H 1 ( k e y ) 发 生 冲 突 时 , 再 计 算 H i = R H 2 ( k e y ) … … , 直 到 冲 突 不 再 产 生 不 易 产 生 聚 集 , 但 增 加 了 计 算 时 间 Hi=RH1(key) i=1,2,…,k 当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key)……,直到冲突不再产生 不易产生聚集,但增加了计算时间 Hi=RH1keyi=12kHi=RH1(key)Hi=RH2(key)
当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key)……,直到冲突不再产生
不易产生聚集,但增加了计算时间

链地址法

将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行
适用于经常进行插入和删除的情况

建立公共溢出区

​ 将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值