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方法。

      

      

  • 相关阅读:
    [Memcached]操作
    [Linux-CentOS7]安装Telnet
    PAT Advanced 1093 Count PAT's (25分)
    PAT Advanced 1065 A+B and C (64bit) (20分)
    PAT Advanced 1009 Product of Polynomials (25分)
    PAT Advanced 1008 Elevator (20分)
    PAT Advanced 1006 Sign In and Sign Out (25分)
    PAT Advanced 1002 A+B for Polynomials (25分)
    半年分布式处理回顾&机器学习(一)——线性回归
    PAT Advanced 1147 Heaps (30分)
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/14579233.html
Copyright © 2011-2022 走看看