1.什么是哈希表?
是一种数据结构,提供了快速的插入和查找操作,基于数组实现。
2.哈希化
2.1 直接将关键字作为索引。
当索引值不再为int型时,大多数索引值是string类型。
2.2 将单词转换为索引。
2.2.1 将字母转换成ASCII码,然后进行相加。
此种方式,当key的哈希码相同时,就会出现不同的key找到同一个值的问题,比如abc和bbb的哈希编码相同。而且重复的概率非常高。
2.2.2 幂的连乘
里
连成之后的数是非常大的,有可能超出int的范围,所以需要压缩。
2.2.3 压缩可选值
可当key的值很长时,hashVal的值是通过幂的连乘得到的,这个值会越来越大,而hashVal为int 或者long类型都是不合适的,使用BigInteger类型。
3.压缩后仍然可能出现问题
冲突,不能保证每个单词都映射到数组的空白单元。
解决办法:开放地址法
链地址法
4.开放地址法
4.1.当冲突发生时,通过查找数组的一个空位,并将数据填入,而不再用哈希函数得到的数组下标,这个方法叫做开放地址法。
4.2.代码实现
5.链地址法
5.1.在哈希表每个单元中设置链表,某个数据项的关键字还是像通常一样映射到哈希表的单元中,而数据项本身插入到单元的链表中。
5.2.代码实现