hash 散列: 是将任意长度的数据映射到有限长度的域上,也就是对一串数据进行hash运算后,输入另一端固定长度的数据,作为数据的身份象征。
注解:Hash算法常用于消息摘要的场景 MD5、SHA都属于Hash算法的实现。
hash 碰撞: 两个不同的原始值经过hash运算后得到相同的结果,这就是哈希碰撞。
1.什么是hash碰撞?
就是两个对象的key的hashcode是一样的,这个时候怎么get他的value呢?
答案:通过equals遍历table那个位置上面的Entry链表。
hash 碰撞出现的场景:
1.一般会出现在大的数据情况下
2.hashcode 生成方法唯一性较弱。
解决hash 碰撞的方法有两个:
1.开发寻址法(开放定址法)
2.链接法 (链地址)
3.建立一个公共溢出区
开发寻址法:当发生地址冲突时,按照某种方法继续探测hash中的其他存储单元,直到找到空位置为止。
链地址法:链地址法是hashmap 中的策略,原理是在hashmap 中同样哈希值的位置以一串链表存储起来数据,把多个原始值不同但哈希结果相同的数据以链表存储起来。
HashMap的默认长度为16,是为了降低hash碰撞的几率。