zoukankan      html  css  js  c++  java
  • 自定义对象作为map哈希表的 键key 时【为啥建议要重写hashCode( )、equals( ) 方法】

    自定义对象作为map哈希表的 键key 时【为啥建议要重写hashCode()、equals() 方法】

    1,为啥建议要重写hashCode()

    ■  为啥要重写hashCode(); //不重写,默认是比较内存地址。

    ✿ hashCode() 什么时候用、hashCode() 的作用? ---生成【哈希表(数组)】索引

    ps:哈希表【本质上就是一个数组【索引-> 存储结点元素】

    索引:是先将计算得到的哈希值,与数组长度 & 【也可以%,不过效率不高】得出。

    ● 细节:计算出来得到的哈希值不同,但是经过&运算【结合考虑到数组长度】

    2,为啥建议要重写 equals() 方法?

    ■  为啥要重写equals(); //不重写,默认是比较内存地址。

    equals() 什么时候用、equals() 的作用 ? ---解决hashCode 冲突时,比较两个key是否相等

     3,疑惑:为啥要重写 equals(); 使用哈希值【即只重写hashCode()方法】比较不行吗?

    当key 不同【例如key的类型不同,String、Integer最后可能算出来相同的hashCode】时,可能算出来相同的哈希值,可以得到相同的索引。导致新的【key-value】结点覆盖到原的【key-value】结点,发生hashCode冲突。

     

    //重写equals() 用来比较两个对象【例如两个对象的引用作为 key 存储在哈希表map 中,重写equals() 就可以比较key 是否相等。】

  • 相关阅读:
    【Maven】安装配置、目录结构、配置文件、常见命令
    【Maven】基础概念、仓库、构建与部属
    【float】与【position】汇总
    【CSS】定义元素的对齐方式
    【CSS】元素样式
    【CSS】绝对定位和相对定位
    网页常见布局
    php--常用的时间处理函数
    16位cpu下主引导扇区及用户程序的编写
    浅谈pageobject模式
  • 原文地址:https://www.cnblogs.com/shan333/p/15502536.html
Copyright © 2011-2022 走看看