数据结构-哈希表(又称散列表)

哈希表:用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。
数组的下标是整数,但是通常生存中存储的key都不规则,所以通过散列函数将键值key转成数组下标,存入数组
在这里插入图片描述
散列函数:就是把键值key 转化为数组下标的函数,例如
(关键字)%(数组大小),就是数组下标
数组大小一般为质数,因为需要均匀的放在hash表中,质数只能被自生和自生倍数整除

散列冲突:模运算后取模值相同,2个不同的key通过散列函数计算出的数组下标一致,就成了散列冲突

解决散列冲突,哈希冲突
1.链表解决
相同的取模,用指针指向下一个地址,java中hashmap就是用链表解决散列冲突的
在这里插入图片描述

2.开放地址 – 线性探测法
冲突就放在当前地址下一个位置

3.开放地址:平法探测法
新位置:= 当前地址的平方
在这里插入图片描述

4.开放寻址:双哈希探测法
所谓双重散列,意思就是不仅要使用一个散列函数。我们使用一组散列函数 hash1(key),hash2(key),hash3(key)……我们先用第一个散列函数,如果计算得到的存储位置已经被占用,再用第二个散列函数,依次类推,直到找到空闲的存储位置

表满: 再次hash rehashing
表超过存储量70%,就会设计一个2倍原来表大小的hash表,把旧表的数据模运算放到新表中,一边插入一边搬移
在这里插入图片描述

缺点:
表越满,性能越差,因为表越满,发生冲突可能性越高,计算越多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值