何时使用哈希表

当判断某一集合中是否出现过某一元素的时候以以下两个力扣题为例:
它们都是判断某一数组中是否有一定关系的两个或多个元素,首先

两个字符串互为字母异位词,当且仅当两个字符串包含的字母相同。根据这个关系找到一个标志,使用哈希表存储每一组字母异位词,哈希表的键为标志。比如说两数和,7就作为标志,当浏览到2的时候去找map中是否有9-2=7

 

总的来讲

哈希表就是通过也就是将key通过一个哈希函数加工处理之后得到一个值,这个值就是数据存放的位置,我们就可以根据这个值快速的找到我们想要的数据。

key是学号也就是101011,那么经过哈希函数的计算之后得到了1

如何取数据

猜测是遍历存放键值对的数组,遍历到数组中的一个元素就看看它的键是不是我们想要的键,如果是的话就取出它值

解决哈希冲突

当发现某一key通过哈希函数映射得到的位置上有键值对了,这就是哈希冲突

开放寻址法

既然当前位置被占用了,我们就看看该位置的后一个位置是否可用,也就是1的位置被占用了,我们就看看2的位置,如果没有被占用,那就放到这里呗,当然,也有可能2的位置也被占用了,那咱就继续往下找,看看3的位置,一次类推,直到找到空位置。

拉链法

哈希表中每个元素存储的是一个链表,如果李四和张三冲突那么就将李四放到张三的下一个结点

扩容

简单点说就是已经被占的位置达到了总位置的某一百分比(增长因子),比如70%,就需要扩容。方案是:新创建一个数组是原来的2倍,然后把原数组的所有键值对都放到新的数组,而它们要通过一个新的哈希函数计算出在新数组的位置。

 

参考:

来吧!一文彻底搞定哈希表!_哈希表庆哥_庆哥Java的博客-CSDN博客

posted on 2023-09-22 21:15  小凉拖  阅读(24)  评论(0)    收藏  举报