zoukankan      html  css  js  c++  java
  • 详解为什么需要重写hashcode 和 equals 方法

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

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

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

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

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

    结果方案:

                   所以需要类重写equals 方法

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

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

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

    解决方案:

                 需要覆写hashCode()

  • 相关阅读:
    set集合
    作业(2)
    字典
    列表功能
    字符串
    while循环
    pb加密转换成C#
    NET在64位系統使用32位oracle客户端访问数据库
    SQL Server中查找包含某个文本的存储过程
    SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户
  • 原文地址:https://www.cnblogs.com/helloqiufei/p/12876847.html
Copyright © 2011-2022 走看看