详解为什么需要重写hashcode 和 equals 方法
Posted helloqiufei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解为什么需要重写hashcode 和 equals 方法相关的知识,希望对你有一定的参考价值。
在HashMap 中 底层时候用的 数组 + 链表 + 红黑树的形式
那现在put(key,value), 他是先计算key的hash 值,通过hash 值找到数组的下标, 判断这个位置是否有对象
没有对象,则将value 放进去, 如果有对象,再去比较这两个对象之间是否相等
问题出现: 比较这两个对象相等,是调用equals 方法, 如果类里面没有覆写equals 方法, 则调用object 对象的equals 方法 即“==” 判断对象
那两个对象里面的值相同, 也会被判定成不同的对象,被追加当前链表的尾部。
结果方案:
所以需要类重写equals 方法
问题出现: 在寻找数组下标的时候,使用hashcode ,相同的对象hashcode 一定相同, 不同的对象hashcode 值可能相同,也可能不同
所以当两个内容相同对象,找对应的数组的下标的时候,就是不一样的,这样直接造成有两个内容相同的key, 因为这里key我们
要求的就是内容不同, 所以出现问题
解决方案:
需要覆写hashCode()
以上是关于详解为什么需要重写hashcode 和 equals 方法的主要内容,如果未能解决你的问题,请参考以下文章