1. 哈希表的定义:哈希表是根据关键码的值而直接进行访问的数据结构。数组就是一张常见的哈希表,其中哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。
2.哈希表的作用:通过哈希表可以快速判断一个元素是否出现在集合里。
3.哈希函数:例如将学生姓名列表转换成哈希表,可以通过哈希函数直接将学生姓名映射为哈希表上的索引,然后通过查询索引下标就可以快速直到这位同学是否在这所学校里。 哈希函数如下图所示,通过hashcode将名字转换为数值,然后再通过必要的处理(例如图中的取余操作,是为了防止hashcode得到的数值大于hash表的大小,但如果学生的数量大于哈希表的大小则需要引入哈希碰撞规则了)。
4.哈希碰撞:当学生数量大于哈希表的大小时,无论哈希函数计算的再怎么均匀,也避免不了有几位学生会同时映射到哈希表的同一个索引下标的位置。如下图所示,两位学生同时映射到了索引下标1的位置,这叫做哈希碰撞。一般哈希碰撞有两种解决方法:拉链法和线性探测法。
总结:当需要快速判断一个元素是否出现在集合里的时候,就要考虑哈希法。哈希法是牺牲了空间换取时间,因为我们要使用额外的数组,set或者map来存放数据才能实现快速的查找。