• 自定义对象作为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 是否相等。】

  • 相关阅读:
    结对编程--黄金分割点游戏
    第一次单元测试,小紧张呢!
    Visual studio 2013 安装的漫长过程
    课后练习题:读程序
    进度条
    “啰嗦”的四则运算
    我与git“美妙”的一天
    结对编程(黄金分割点)
    Visual Studio 2015的安装和简单的测试
    软件工程学习体会
  • 原文地址:https://www.cnblogs.com/shan333/p/15502536.html
Copyright © 2020-2023  润新知