Object类的equal和hashCode方法重写,为什么?

往HashMap添加元素的时候,需要先定位到在数组的位置(hashCode方法)。

 

如果只重写了 equals 方法,两个对象 equals 返回了true,集合是不允许出现重复元素的,只能插入一个。

 

此时如果没有重写 hashCode 方法,那么就无法定位到同一个位置,集合还是会插入元素。这样集合中就出现了重复元素了。那么重写的equals方法就没有意义了。

如下图:

Object类的equal和hashCode方法重写,为什么?_第1张图片

如果重写了hashcode方法,确保两个对象都能够定位到相同的位置,那么就可以遍历这条单向链表,使用equals方法判断两个对象是否相同,如果相同,那么就不插入了(HashMap的实现仍然插入,但是覆盖掉旧的value)。如果不相同,就插入到链表的头节点处。

你可能感兴趣的:(Java字符串及基本类)