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