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 是否相等。】

  • 相关阅读:
    mysql修改库、表、字段 字符集,中文排序
    CENTOS6.5 编译安装MySQL5.7.14
    自己的一个小小的目标
    css 浮动和清除浮动
    移动端调试方法
    Fiddler抓包工具总结
    Vue中错误图片的处理
    跨域资源共享 CORS 详解
    十大排序算法JavaScript实现总结
    javascript实现二叉搜索树
  • 原文地址:https://www.cnblogs.com/shan333/p/15502536.html
Copyright © 2011-2022 走看看