Java基本知识(equals、==、hashcode)2019-09-09篇

                                                      Java基本知识

1. Hash碰撞冲突 

     默认hashCode()调用是native本地方法,它的默认实现与对象地址有关,没有实际意义。对象hash前提是实现hashcode与equals方法。hashcode方法作用是保证对象返回唯一的hash值。但hash算法并不完美,有可能两个不同的原始值在经过哈希运算后得到相同的结果,这就是hash碰撞。

2、解决碰撞

  •  开放定址法 (当发生地址冲突时,根据某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止)
  •  链地址法(在hashMap中将多个原数据不相同而哈希相同的以链表方式存储起来)

3、equals 与 == 

  •    equals默认实现就是 地址比较(==),但在实际业务中,我们需要根据实现业务来判断两个对象是否相同。
  •    == ,地址比较。

4、hashCode作用

   hashCode作用是来获取哈希码,也可称为散列码。实际返回值是int型数据。用于确定对象在哈希表的位置。所有类都有hashCode方法,但hashCode只有在创建某个类的散列表的时候才有用,因为哈希表的位置是通过hashCode来确认对象的。Java中常用的哈希表有:HashMap、HashSet、HashTable。所以如果一个对象一定不会在哈希表中使用,那么是没有必要复写hashCode方法的。但如果使用了但没有重写hashCode,有可能出现不一样的结果。同时如果两个对象的equals相等,hashCode一定相等,反之不一定。

5、重写要求

  •    a==b 那么 a.eqauls(b) = true必须相等  且 a.hashCode() == b.hashCode() 必须相等 ;
  •    a.equals(b) , 那么 a== b 不一定,且a.hashCode() == b.hashCode() 必须相等 ;
  •    a.hashCode() == b.hashCode() ,那么 a.equlas(b) 不一定相等 ,且 a == b 也不一定;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值