hashcode相关

什么是

    hashCodejdk根据对象的地址或者字符串或者数字算出来的int类型的数值 。public int hashCode()返回该对象的哈希码值。Object 自带这个方法,自定义的类重写此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。

 

一致性

     Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行hashcode比较时所用的信息没有被修改。

equals

    如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果,注:这里说的equals(Object) 方法是指Object类中未被子类重写过的equals方法。

    如果两个hashCode()返回的结果相等,则两个对象的equals方法不一定相等。

附加

    如果根据equals(java.lang.Object)方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。

 

原理

 

    根据这个类的一些属性来生成一个数字,保证逻辑含义相同的对象返回的哈希码相同。

例如

    Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。

    String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串所在的堆空间相同,返回的哈希码也相同。

    Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。

 

 

使用

 

    因此哈希码的使用,我们最好把重要的类,尤其是可能需要进行相同比对的类重写hashcode方法,要尽量保证相同逻辑对象返回值相同,不同逻辑对象返回值不同。

    Object类中equals方法具体就是用“==”进行比较,比较的是物理地址,因此重写hashcode方法往往需要重写equals方法或其他比较方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值