码迷,mamicode.com
首页 > 其他好文 > 详细

详解为什么需要重写hashcode 和 equals 方法

时间:2020-05-12 17:01:58      阅读:45      评论:0      收藏:0      [点我收藏+]

标签:解决方案   方法   数组下标   shm   key   需要   equal   value   内容   

在HashMap 中 底层时候用的 数组 + 链表 + 红黑树的形式

那现在put(key,value), 他是先计算key的hash 值,通过hash 值找到数组的下标, 判断这个位置是否有对象

没有对象,则将value 放进去, 如果有对象,再去比较这两个对象之间是否相等

问题出现: 比较这两个对象相等,是调用equals 方法, 如果类里面没有覆写equals 方法, 则调用object 对象的equals 方法 即“==” 判断对象

                     那两个对象里面的值相同, 也会被判定成不同的对象,被追加当前链表的尾部。

结果方案:

               所以需要类重写equals 方法

问题出现: 在寻找数组下标的时候,使用hashcode ,相同的对象hashcode 一定相同, 不同的对象hashcode 值可能相同,也可能不同

     所以当两个内容相同对象,找对应的数组的下标的时候,就是不一样的,这样直接造成有两个内容相同的key, 因为这里key我们

      要求的就是内容不同, 所以出现问题

解决方案:

             需要覆写hashCode()

详解为什么需要重写hashcode 和 equals 方法

标签:解决方案   方法   数组下标   shm   key   需要   equal   value   内容   

原文地址:https://www.cnblogs.com/helloqiufei/p/12876847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!