哈希冲突-哈希碰撞「建议收藏」

2022-07-04 13:12:00 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,其实这就是所谓的哈希冲突,也叫哈希碰撞。 哈希函数的设计至关重要,好的哈希函数会尽可能地保证 计算简单散列地址分布均匀,但是,我们需要清楚的是,数组是一块连续的固定长度的内存空间,再好的哈希函数也不能保证得到的存储地址绝对不发生冲突。那么哈希冲突如何解决呢? 哈希冲突的解决方案有多种:开放地址法(发生冲突,继续寻找下一块未被占用的存储地址),再散列函数法链地址法,而HashMap即是采用了链地址法,也就是数组 链表的方式,

简单来说,HashMap由数组 链表组成的,数组是HashMap的主体链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149351.html原文链接:https://javaforall.cn

0 人点赞