什么是Hash算法。
散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。[1]好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。
---------- 来自维基百科
常见的Hash算法如:MD5、SHA
Hash函数的特点。
Hash冲突
Hash冲突就是两个不同的数据经过Hash函数计算得到的Hash值一样。
为什么呢?这涉及到数学中比较好理解的一个原理:抽屉原理。
抽屉原理:桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面至少放两个苹果。这一现象就是我们所说的“抽屉原理”。
如何解决Hash冲突
开放寻址法:开放寻址法是一种解决碰撞的方法,对于开放寻址冲突解决方法,比较经典的有线性探测方法(Linear Probing)、二次探测(Quadratic probing)和 双重散列(Double hashing)等方法。
链表法:链表法是一种更加常用的散列冲突解决办法,相比开放寻址法,它要简单很多。在散列表中,每个位置对应一条链表,所有散列值相同的元素都放到相同位置对应的链表中。HashMap解决Hash冲突用的就是链表法。
以上来“自程序员吴师兄“ https://www.zhihu.com/question/20820286
原文:https://www.cnblogs.com/kbian/p/12347381.html