zoukankan      html  css  js  c++  java
  • hashCode和equals

    hashCode简介

        hashCod()作用 是获取哈希码,也称为散列码;他实际上是返回一个int整数,这个哈希码的作用是确定该函数哈希表中的索引位置。hashCode定义在JDK的Object.java中,Java中的任何类都包含有hashCode()函数。

      散列表存储的是键值对,他的特点是:能根据 “键” 快速的检索出对应的 “值”,这其中就用到了散列码。因为hashcode算法原因,不同的两个对象,可能计算出两个相同的hashCode。

     为什么要有hashCode?

      以hashSet如何检查重复来说明为什么会有hashCode:

      对象加入hashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,看该位置是否有值,如果没有,HashSet会认为对象没有重复出现。如果有值,这时会调用equals()方法来检查两个对象是否真的相同,如果两者相同,

      HashSet就不会让其加入操作成功,如果不同的话,就会重新散列到其他位置,这样就大大减少了equals的次数,相应的就大大提高了运行的速度。

      

      如果两个对象相等,则hashCode一定是相同的。

      两个对象相等,对两个对象分别调用equals方法都是返回true

      两个对象有相同的hashCode值,他们也不一定相等

      因此,equals方法被覆盖过,则hashCode方法必须被覆盖。

      hashCode()的默认行为是对堆上的对象产生独特值,如果没有重写hashCode,则该class的两个对象无论如何都不会相等,即使这两个对象指向相同的数据。

        为什么重写equals一定要重写hashCode方法那?

      因为equals方法比较相同的,hashCode一定相同,所以为了保证equals相同的hashCode相同,就必须重写hashCode方法。

      

      

  • 相关阅读:
    欧拉函数 || [SDOI2008]仪仗队 || BZOJ 2190 || Luogu P2158
    欧拉函数 || Calculation 2 || HDU 3501
    并查集+时光倒流 || [JSOI2008]星球大战starwar || BZOJ 1015 || Luogu P1197
    并查集+启发式合并+LCA思想 || 冷战 || BZOJ 4668
    并查集+优先队列+启发式合并 || 罗马游戏 || BZOJ 1455 || Luogu p2713
    BZOJ-USACO被虐记
    #1
    BZOJ2441: [中山市选2011]小W的问题
    BZOJ2726: [SDOI2012]任务安排
    BZOJ1492: [NOI2007]货币兑换Cash
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/14579233.html
Copyright © 2011-2022 走看看