开发者学堂课程【Java面试疑难点串讲1:面试技巧及语言基础:Hash 冲突】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/24/detail/483
Hash 冲突
1.HashMap中 Hash 冲突严重时会影响 HashMap 性能,如何解决。
在整个的 Hash 存储过程之中,必须要明确两个实际的问题:hashCode()与equal()两个方法。如果 hashCode()相同,这个时候会查询 equals(),不过一般在使用Map的时候都会考虑使用 string 来实现,所以在 string 实现的 Key 里面是不存在这种复杂的概念,也就是说这样的概念只存在于自定义类里面,所以当 Hash 突严重的时候,首先先去考虑 equals()方法是否正常。
那么在进行数据定位的时候会更加的快速。
但是如果从实际的数据结构的算法来讲,如果真的有哈希冲突那么就需要使用一些特定的处理方法。
• 开放定址法,为一个哈希冲突求的一个地址序列;
• 链地址法。将所有哈希冲突的内容保存在一个链表里面(HashMap 的实现原理);
• 再哈希法,重新做一个 Hash 计算;
在 HashMap 源代码之中,主要观察 Node 类(子类定义的默认内部类)、Map.Entry (内部接口)类,这两个都是内部类。