Hash冲突
...小于 1 分钟Java基础集合
什么是hash冲突:
总会出现不同的数据经过计算后得到的hash值,然后再取模以后的值是一样的情况,因为你的初始化空间是有限的。
怎么解决呢?
- 开放定址法:从发生冲突的地方按照一定次序,从hash表中找到一个空闲的位置,然后把发生冲突的元素存入到这个位置;在java中ThreadLocal就用到了线性探针法;
- 链式寻址法:对存在hash冲突的key,hahsmap将这些key组成一个单向链表,然后通过尾插法保存到当前位置的尾部;为了保证查询效率,当链表长度大于8,并且数组长度大于等于64的时候,hashmap会将当前链表转换为红黑树;
- 多次hash法:布隆过滤器;