面试题 - 哈希冲突

哈希冲突概念

两个不同元素通过哈希函数得出的实际存储地址相同,即对某个元素进行哈希运算时得到一个地址,然后进行插入时发现被其他元素占用。哈希冲突也叫哈希碰撞

设计哈希函数是为了尽可能保证计算简单和散列地址分布均匀,数组是一块连续的固定长度的内存空间,再好的哈希函数也不能保证得到的内存地址绝不会发生冲突。

哈希冲突解决方案

1) 开放地址法:发生冲突,继续寻找下一块未被占用的存储地址。

基本思想:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi,将相应元素存入其中。

2) 再散列函数法

基本思想:同时构造多个不同的哈希函数 [Hi =RH1( key)i=1, 2, …, k] 当哈希地址 Hi =RH1 ( key)发生冲突时,再计算 Hi =RH2( key)……,直到冲突不再产生。这种方法不易产生聚集,但增加了计算时间。

3) 链地址法:HashMap采用了该方法,即数组+链表的形式。

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

注意:

1) 相同对象,hashCode必然相同。hashCode相同的两个对象不一定是相同对象。

2) 判断对象是否相同,采用equal方法。x.equals(y) == true 表示x和y是相同对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值