什么是Hash冲突?如何解决Hash冲突?

        

目录

一丶什么是Hash冲突

二丶如何解决Hash冲突


简介:Hash叫做‘散列表’,就是把任意长度输入,通过散列算法,变成固定长度输出,该输出结果是散列值。其实这种转换是一种压缩映射,散列表的空间通常小于输入空间,不同的输入可能会散列成相同的输出,所以不能从散列表来唯一确定输入值,这就出现了Hash冲突;

一丶什么是Hash冲突

        Hash冲突是指在哈希表中,不同的关键字通过哈希函数计算得到的哈希值却相同的情况。这种情况会导致哈希表的性能下降,因为哈希表需要在同一位置上存储多个数据。

二丶如何解决Hash冲突

  • 开放定址法:当发生冲突是时,继续寻找下一个可用的位置,直到找到一个空闲的位置为止。这种方法可能会导致聚集现象,即冲突位置附近的空间被更频繁的使用;
  • 链地地址(拉链法):将哈希值相同的元素构成一个同义词的单链表,并将单链表的头指针存放在哈希表的第i个单元。查找、插入和删除主要在同义词链表中进行。这种方法需要额外的内存来存储链表,但可以避免聚集现象。HashMap采用的就是链地地址法来解决Hash冲突;
  • 再哈希法:当发生冲突时,使用另一个哈希函数对键进行再次哈希,以确定下一个位置。这种方法需要选择一个合适的再哈希函数,以避免过多的冲突;
  • 建立公共溢出区:将存在冲突的元素统一放在一个公共的溢出区;

HashMap在JDK1.8版本中通过链式寻址法以及红黑树来解决Hash冲突的问题。其中红黑树是为了优化Hash表的链表过长导致时间复杂度增加的问题。当链表长度大于8并且Hash表的容量大于64时,再向链表添加元素,就会触发链表向红黑树的一个转化。这种方法结合链地地址和再哈希法的优点,避免了过多的内存消耗,又优化了查找效率;

结尾:喜欢的朋友点个赞吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值