• 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替换,如果不存在,则添加

  • 相关阅读:
    Process 'command '/Users/lidaqiang/Library/Android/sdk/build-tools/27.0.3/aapt'' finished with non-zero exit value 1
    合同诈骗无罪裁判要旨、判决理由及评析意见
    互换不同种类毒品行为如何认定
    正当防卫指导性案例以及研析
    期待可能性理论的司法适用
    共同犯罪认定方法
    刑事案件鉴定意见常用质证要点
    张明楷的100个刑法案例
    刑事律师办案必备126部法律
    正当防卫裁判要旨16条
  • 原文地址:https://www.cnblogs.com/gucl/p/11311792.html
Copyright © 2020-2023  润新知