• equals和hashCode()


    在java中,对象都继承了Object类的equals()和hashCode()方法,用于比较两个对象是否相等

    如果没有重写,比较的就是内存地址,不同的对象,内存地址肯定是不同的,

    如果需要根据自己的逻辑判断两个对象相等,那么就需要重写equals()和hashCode()方法

    equals和hashCode的作用其实是一样的,都是用来比较两个对象是否相等的,但为什么有了equals还需要hashCode呢?

    因为,equals方法一般比较的全面比较复杂,都通过equals判断的话,效率就比较低。而hashCode值需要生产hashCode值比较就可以了,效率很高,所以可以首先用hashCode判断,

    但为什么hashCode效率这么高,还需要equals呢?

    因为hashCode不一定准确,两个对象hashCode值相等,不能说明两个对象相等,这时候就需要进行equals判断

    每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

    原则:

    1. equals相等,那么hashCode值一定相等 (如果hashCode值不相等,那equals一定不等,即不是相同对象)

    2. hashCode相等,equals不一定相等

    HashSet存:

    放入对象obj

    计算obj的hashCode值,和已放入对象的hashCode值是否相等,如果不想等,说明肯定是不同对象,直接放入,如果相等,再进行equals判断,相等则放入,不想等则舍弃

    HashMap存取操作:

    put:

    首先得到hashCode值,hash算法通过hashCode值得到一个数组的index,找到对应位置,如果为null,就直接放入,如果不为null,则使用链地址法,equals方法判断这个key在链表中是否存在,如果存在,则把原有key的value替换,如果不存在,则添加

  • 相关阅读:
    jquery web 國際化
    Struts2 分割字符串标签s:generator
    (55) 销售锁货功能
    (54) 记录销售单修改详细
    (53) 动态列表自定义
    exe文件作为服务启动
    (52)KeyError错误
    (51) magento集成增加到款通知
    (50)与magento集成
    (49) odoo context操作
  • 原文地址:https://www.cnblogs.com/gucl/p/11311792.html
Copyright © 2020-2023  润新知