哈希算法
直接定址法:直接以关键字k或者加上一个常数k+c作为hash地址
除留余数法:用关键字m除以一个不大于m的数p所得余数作为hash地址
数字分析法:提取关键字中取值较均匀的数字作为hash地址
分段叠加法:按照hash地址的位数将关键字分为相等的几段数字,尾段长度可以不相等,将它们相加舍弃进位得到hash地址
平均取中法:如果关键字各个部分不均匀的话,可以先求它的平方值,然后按需取中间几位作为hash地址
伪随机法:采用一个随机函数作为hash函数。
解决碰撞的算法
开放定址法:开放定址法就是一旦发生冲突,就寻找下一个空的散列,只要散列表足够大总能找到对应,并将记录存入。
链地址法:将哈希表的每个单元看作链表的头结点,所有哈希地址为i的元素构成一个同义词的链表。发生冲突时就把该关键字链在链表的尾节点(尾插法,jdk1.7是头插法,并发时可能会死循环)
再哈希法:发生哈希冲突的时候再用另外一个哈希函数计算直到不冲突为止。
建立公共溢出区法:将哈希表分为基本表和溢出表,将发生冲突的元素都放在溢出表。
