哈希表在笔试中经常出现,笔者今天做一套笔试题竟然出现了两次,且考察的知识点都是解决哈希冲突问题,故特来记录一下。
哈希表HashMap是一种用来提高查询效率的数据结构,其关键是哈希函数或者叫做散列函数,其实就是一个映射关系,作用是将key映射到数据的地址索引,从而达快速访问到数据的目的(因为哈希表的底层是数组实现的,所以有了索引就能很快地找到对应的数据)。
常用的哈希函数,除留余数法,简单的说就是取模运算%,例如hash(key)=key%11
题目一般会给定哈希函数,然后给定几个已有的key,然后给出一个key,按照某种哈希冲突解决方法求得这个key的地址索引。我遇到的冲突解决方法是二次探测法,即hash(key)=(hash(key)+di)%11,这个式子的意思其实很简单,就是说当产生哈希冲突时,把原来计算出来的余数依次
+1^2
-1^2
+2^2
-2^2
…
一直到不产生冲突为止,即可求得地址索引。
当然,解决哈希冲突还有其它方法:线性探测法、链地址法