1、典型回答
哈希冲突(Hash Colision)是指不同的输入数据在进行哈希函数计算后,得到相同的哈希值的情况。由于哈希函数是将输入映射到一个有限的哈希表中,而输入的数据量可能是无限的,所以在特定的哈希函数和哈希表大小的限制下,哈希冲突是难以避免的
解决哈希冲突的常见方法有以下几种:
- 链地址法(Separate Chaining):将哈希表中的每个桶都设置为一个链表,当发生哈希冲突时,将新的元素插入到链表的末尾。这种方法的优点是简单易懂,适用于元素数量较多的情况。缺点是当链表过长时,查询效率会降低。
- 再哈希法(Rehashing):当发生哈希冲突时,使用另一个哈希函数计算出一个新的哈希值,然后将元素插入到对应的桶中。这种方法的优点是简单易懂,适用于元素数量较少的情况。缺点是需要额外的哈希函数,且当哈希函数不够随机时,容易产生聚集现象
- 开放地址法(Open Addressing):当发生哈希冲时,就去寻找下一个空的哈希地址,只要哈希表足够大空的哈希地址总能找到,之后再将数据进行存储。
在 Java 的 HashMap 中,是通过链地址法来解决哈希冲突的
2、全面剖析
哈希冲突(Hash Colision)是指不同的输入数据在进行哈希函数计算后,得到相同的哈希值的情况。此时如果强行的进行数据存储就会发生数据覆盖的问题,所以我们通常要使用:链地址法、再哈希法或者是开发地址法来找到新的位置再进行存储。