Hashcode&&equals

Hash简介

HashCode是哈希码。

HashCode由Hash函数得到。

加入有两个10G的文件。可以把他们当成2个10吨的猪肉。

而Hash算法就是绞肉机。

当Hash算法真正的发挥了作用的时候,这10吨肉就被剿成了很少但完全不同的int类型的编码。而根据这串编码就可以区别楚这10吨肉。

Hash表:通过Hash函数得到的HashCode组成的集合。

根据对象的物理地址,

转化为一个整数。

根据Hash函数,把这串整数,

转化成HashCode,存放于Hash表中。

Hash算法核心

算法核心:Hash算法仅仅是将对象进行分组,这样当对象成百上千的时候就会容易筛选出来。可是每一组不一定有一个对象。–每一组就是一个HashCode。但不同的地址也可以生成相同的HashCode。怎么办呢?

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

这是原来的equals。

如果不重写equals,那么就会导致可能两个对象会一样。

HashCode于equals之间的相等关系

如果两个对象的equals相等,那么必定HashCode也相等。

如果两个对象的HashCode相等,不一定equals相等。

为什么重写equals时也要重写HashCode方法?

因为重写了equals方法后,两个对象若相等,不能保证根据原来的HashCode方法得出完全相同的HashCode。因此最好重写HashCode方法。

String类默认重写了hashCode和equals。

java里面找对象当然是按照hashcode码来的,这样才效率高。

但一个类创建的两个对象,属性完全一样,如果没有重写hashcode方法,他们的hash码不一样。

我们当然希望这两个对象的hash码相等。因此重写hashcode方法就可以保证同一个类创建完全一样的对象时他俩的地址是一样的。

但由hash算法,很可能其他类创建的对象和你有同样的hash码。这个时候写equals保证了在类这一级别独立。


重写equals重写hashcode两个类创建的两个对象比一个类创建的两个对象比
falsefalsehashcode可能相等,equals->falsehashcode可能相等,equals->false
falsetruehashcode可能相等,equals->falseif(ObjA.所有属性==ObjB.所有属性) then hashcode一定相等,equals->false
truefalsehashcode可能相等,equals->false|trueif(ObjA.所有属性==ObjB.所有属性) then hashcode可能相等,equals->true
truetruehashcode可能相等,equals->falseif(ObjA.所有属性==ObjB.所有属性) then hashcode一定相等,equals->true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值