总的来讲
哈希表就是通过也就是将key通过一个哈希函数加工处理之后得到一个值,这个值就是数据存放的位置,我们就可以根据这个值快速的找到我们想要的数据。
key是学号也就是101011,那么经过哈希函数的计算之后得到了1
如何取数据
猜测是遍历存放键值对的数组,遍历到数组中的一个元素就看看它的键是不是我们想要的键,如果是的话就取出它值
解决哈希冲突
当发现某一key通过哈希函数映射得到的位置上有键值对了,这就是哈希冲突
开放寻址法
既然当前位置被占用了,我们就看看该位置的后一个位置是否可用,也就是1的位置被占用了,我们就看看2的位置,如果没有被占用,那就放到这里呗,当然,也有可能2的位置也被占用了,那咱就继续往下找,看看3的位置,一次类推,直到找到空位置。
拉链法
哈希表中每个元素存储的是一个链表,如果李四和张三冲突那么就将李四放到张三的下一个结点
扩容
简单点说就是已经被占的位置达到了总位置的某一百分比(增长因子),比如70%,就需要扩容。方案是:新创建一个数组是原来的2倍,然后把原数组的所有键值对都放到新的数组,而它们要通过一个新的哈希函数计算出在新数组的位置。
参考:
来吧!一文彻底搞定哈希表!_哈希表庆哥_庆哥Java的博客-CSDN博客
标签:数组,占用,位置,哈希,概念,键值,key From: https://www.cnblogs.com/Sandals-little/p/17723403.html