目录
一、什么是hash冲突
HashMap基于Hash算法实现的,采用数组的结果存储数据,数组长度的默认长度为16,我们通过put(key,value)存储,get(key)来获取。当传入key时,HashMap会根据key,hashCode()计算出hash值,根据hash值将value保存bucket里。当计算出的hash值相同时,我们称之为hash冲突。
二、解决hash冲出的方法
链式寻址法
HashMap把冲突的这些key组成一个单向链表,然后采用尾插法,把这样一个key保存到链表的尾部,另外为了避免链表过长影响查询效率,所以在链表长度大于8,并且数组长度大于等于64的时候,HashMap会把当前链表转化为红黑树,从而减少链表查询时间复杂度的问题,来提升查询效率。
再Hash法
就是如果某个hash函数产生了冲突,再用另外一个hash进行计算,比如布隆过滤器就采用了这种方法。
开放寻址法
就是直接从冲突的数组位置往下寻找一个空的数组下标进行数据存储,这个再ThreadLocal里面有使用到
建立公共溢出区
就是把存在冲突的key统一放在一个公共溢出区里面。