HashMap中的equals()和hashCode()
HashMap中的equals和hashCode Java的Object对象有9个方法,其中的equals()和hashCode()在hashMap的实现里面起着比较重要的作用,我在研究hashMap的源码时就遇到了它们俩,此篇博文主要是为了记录它们之间的相爱相杀。 为了说明它们的关系,我们需要HashMap的背景知识。 HashMap的存储方式: HashMap的实现方式是数组链, 不同的对象根据其哈希码hashCode方法的返回值)找到对应的数组下标,然后存入数组 。不同的对象有相同的哈希码时怎么办?这就由数组链中的链来解决了,相同哈希码的对象都放在同一条链上,该链的链头指向数组,进而形成数组链。 当第一个对象已经存入HashMap,第二个对象准备存入HashMap时,系统在查找到数组下标后若发现它们的hashCode相同(数组下标相同)(也就是冲突),会调用equals()来检查它们之间的关系,会有相应有以下两种处理方法: 1. 如果相等,系统就不再存入第二个对象; 如果不等,系统视它们为纯粹的下标冲突,将它们放在同一条链上;(拉链桶) 如果它们的hashCode不相同,直接存入第二个对象。 equals()匹配但hashCode()不同:会发生不可预料的事情 现在假设有两个对象,它们的equals()相匹配,但hashCode()却不同