小谈一下哈希表

1.定义

哈希表也叫散列表(Hash table),是根据键而直接访问在内存存储位置的数据结构,她通过计算一个关于键值的函数,将所需要查询的数据映射到表中一个位置来访问记录,加快了查找的速度。映射函数是散列函数,存放记录的数组叫做散列表或者哈希表。
tip1,哈希表也是一种数据结构。
tip2,哈希表本质上是数组。

实现哈希表的两种方式

1.数组+链表
2.数组+二叉树

通俗的理解哈希表就是字典,对于一个汉字我们称它为x,然后我们通过映射函数
F(x)就是我们字典中的A,B,C...存放这个首字母的表就是散列表,然后我们找到
该散列表之后就很方便查找了;纳闷我们对于给定的数x经过映射函数进行处理后
得到对应在哈希表中的值。所谓的哈希冲突就是以A为首字母的字有很多,如果只
有一个存储空间自然就只能存储一个,其他的就存储不了了,纳闷就出现冲突了
,就是哈希冲突。其中关键值是我们给的x,将关键值进行哈希函数处理
哈希表不想数组那样知识存储一个值,而是存放一个键值对的数据,键值对就是
key-value,key叫做键值,value叫做哈希值(hash值),在哈希表中我们不叫键
值对,而是叫Entry

解决哈希冲突的方法

1.开放寻址法,意思就是位置如果被占了那就再找一个其他的位置,也就是说看一下他下一位能不能用,如果仍然是被占用的那么我们就继续看下一个。
2.拉链法,就是用链表实现,那么我们的entry里面就要存储一个指针,但是我们拿java集合类中的HashMap来说,如果链表的长度大于等于8,纳闷链表就会转换成树结构

哈希表的扩容

扩容是由于哈希冲突过多时,我们在扩容时会涉及到一个增长因子的概念,也叫做负载因子,也就是已经被占用的位置和总位置的一个百分比;扩容也不是将数组扩大,而是新船舰一个数组是原来的两倍,然后把所有的Entry都重新Hash一遍(因为哈希函数改变了)放到新的数组中

哈希表的核心

哈希函数
设计哈希函数的方法包括直接定址法,数字分析法,折叠法,随机数法,除留余数法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值