一、定义:
一种存储键值对的基本结构,哈希表也叫做散列表
哈希表的本质上是一个数组,它的底层实现是使用数组实现的
二、哈希函数
构造哈希函数最常用的方法发是除留余数法,用键值除以桶的总数,得到的余数就是存储的位置,
哈希函数特征
1、输入域无穷大,输出域有限
2、有可能不同的输入对应相同的输出
3、如果输入的参数是一样的,那么输出的值一定是相同的,没有任何的随机成分
4、均匀性:类似的输入,通过哈希函数打乱得到均匀
三、哈希碰撞(哈希冲突)
通过哈希函数的方法造成的不同的输入却相同的输出。
哈希碰撞的解决方案
1、线性探测再散列
一旦发生了冲突就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总是可以找到的。这种方法的效率很差。
2、再哈希法
当用第一个哈希函数发生哈希冲突时,就换一个哈希函数,知道没有冲突为止。
3、链地址法(※※※)
线性探测再散列的方法就是当发生冲突时再换一个空的散列地址。而链地址法是当发生哈希冲突时,在原地处理(使用链表处理)
4、建立一个公共溢出区
新建一块内存来存储发生冲突的数据