当前位置:首页 > 分类 > JAVA入门 > equals和hashcode的关系

equals和hashcode的关系

说起equals和hashcode的关系,要从Map的实现类如HashMap类说起。

HashMap在插入和访问元素时,都会按顺序经历两个步骤:a,使用key的hashcode计算索引;b,调用key的== || equals。

1,使用key的hashcode计算索引,同一个索引会使用链表保存多个元素(即在同一个索引上的key的hashcode相等),找到索引后再调用key的== || equals(即同一个索引上的各元素的equals不相等),所以hashcode相等时,equals不一定相等;

2,比较equals的前提是元素在同一个索引上,即hashcode相等,所以equals相等时,hashcode一定相等。


故hashcode相等时,equals不一定相等;equals相等时,hashcode一定相等。


问:什么情况下需要重写hashcode方法?

答:在使用某个自定义类作为hahsmap的key时,如果因为业务需要,需要重写equals方法(用户认为是同一个元素),那么一定要重写hashcode方法,保证equals相等时,hashcode一定相等,否则一旦出现equals相等而hashcode不相等的元素,将导致用户认为是同一个的元素因为hashcode不同而在多个索引上保存;