Object类里hashcode和equals的解析

1,获取哈希码

public native int hashCode();

解释:
hash是一个函数,该函数中的实现就是一种算法,就是通过一系列的算法来得到一个hash值。通过hash算法得到的hash值在hash表中存储。对象的物理地址跟这个hashcode地址不一样,hashcode代表对象的地址说的是对象在hash表中的位置,物理地址说的对象存放在内存中的地址。通过对象的内部地址(也就是物理地址)转换成一个整数,然后该整数通过hash函数的算法就得到了hashcode。
作用
为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的。通过一个例子解释一下。
例子:现在需要存储一百个不同的数字,当我们存到第99个数据的时候,我们需要遍历98个数据进行比较,这样就很浪费时间。所以采用hash表,**如图:**当我们接着存储数字时,只需要比较对应hashcode相同的一列即可,不必检查所有的,假如我们存到59算出他的hashcode是1,那么我们只需要比较八个数字即可。
在这里插入图片描述

2,比较对象的地址值是否相等

public boolean equals(Object obj) {
        return (this == obj);
    }

解释:通过前面这个例子,大概可以知道,先通过hashcode来比较,如果hashcode相等,那么就用equals方法来比较两个对象是否相等。

用个例子说明:上面说的hash表中的10(0到9)个位置,就好比10个桶,每个桶里能装很多的对象,对象A通过hash函数算法得到将它放到1号桶中,当然肯定有别的对象也会放到1号桶中,如果对象B也通过算法分到了1号桶,那么它如何识别桶中其他对象是否和它一样呢,这时候就需要equals方法来进行筛选了。
注意:
1、如果两个对象equals相等,那么这两个对象的HashCode一定也相同

2、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值