HashMap
保存key-value形式的数据
-
Hash算法,就是把任意长度的输入,通过散列算法,变成固定长度的输出,这个输出结果是散列值。
-
Hash表又叫做“散列表”,它是通过key直接访问在内存存储位置的数据结构,在具体实现上,我们通过hash函数把key映射到表中的某个位置,来获取这个位置的数据,从而加快查找速度。
hash冲突
所谓hash冲突,是由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,所以总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。
如:保留的value通过hash算法产生的值相同,就出现的哈希冲突。
解决hash冲突:
- 开放定址法,也称为线性探测法,就是从发生冲突的那个位置开始,
按照一定的次序从hash表中找到一个空闲的位置
,然后把发生冲突的元素存入到这个空闲位置中。 - 链式寻址法,这是一种非常常见的方法,简单理解就是把存在hash冲突的key,
以单向链表的方式来存储
,比如HashMap就是采用链式寻址法来实现的。 - 再hash法,就是当通过某个hash函数计算的key存在冲突时,
再用另外一个hash函数对这个key做hash
,一直运算直到不再产生冲突。这种方式会增加计算时间,性能影响较大。 - 建立公共溢出区, 就是把hash表分为基本表和溢出表两个部分,
凡事存在冲突的元素,一律放入到溢出表中。