引言
散列函数,又称为散列算法,哈希函数。常见的比如MD4,MD5,SHA-0,SHA-1等。构造散列函数时应注意:
- 散列函数的定义域必须包括存储的全部元素的关键字,如果散列表允许有m个地址时,散列函数的值域应该是[0, m-1]。
- 散列函数计算出来的地址应该能均匀分布在整个地址空间中,若key是从关键字集合中随机抽取的一个关键字,散列函数应能以同等概率取0到m-1中的每一个值。
- 散列函数应该是简单的,能在较短的时间内计算出结果。
在Java1.7中HashMap的底层源码中哈希函数的实现其实是分开写的。下面是HashMap中put方法的源码。他是先计算了key的一个hash数值。
下面是HashMap中hash函数的实现,请注意,这里的hash与本篇文章说的哈希函数不同,因为HashMap中的哈希函数是分两步实现的。
下面是哈希函数在HashMap源码中实现的第二部分。
所以,HashMap的哈希函数可以表示为:
Hash(key)