哈希表是一种根据 key-value 进行访问的数据结构,它通过把 key 值映射到表中的一个位置来访问记录,以加快查找速度,哈希表中寻找一个特定的元素,时间复杂度只需要O(1)。
只要两个元素的 key 计算的哈希值相同就会发生哈希碰撞,也叫哈希冲突。遇到哈希冲突怎么办?
1、链表式解决
我们熟悉的 HashMap 就是采用了这种方式解决哈希冲突
当没有发生哈希冲突的时候 HashMap 只有数组。但是当发生哈希冲突时,它会在哈希函数找到的当前数组内存地址位置下添加一条链表。
2、开放寻址法
2.1 线性探测法
ThreadLocal 就是采用了这种方式解决哈希冲突
如下图,元素 15 已经占据了下标为 2 的位置,元素 2 本身也应该占据下标为 2 的位置,这时遇到哈希冲突,它就往下一个地址寻找空位。