hashcode作用,重写equals、hashcode

hashcode的作用

hashcode用于返回对象的散列值,用于在散列函数中确定放置的桶的位置

  1. hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的
  2. 如果两个对象相同,就是适用于equals(java.lang.Object)方法,那么这两个对象的hashCode一定要相同
  3. 如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致。否则与上述两点相悖
  4. 两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equal(java.lang.Object)方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”

为什么重写equals还要重写hashCode?

HashMap中,若比较key是否相等,要同时使用这两个函数。
因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即使有相同含义的两个对象,比较也是不相等的。

  • HashMap中比较key的方法:先求出key的hashcode(),比较其值是否相等,若相等再比较equals(),此时若相等则认为他们是相等的,若equals()不相等则认为他们是不相等的

  • 若只重写hashcode()不重写equals()方法,当比较equals()时只是看他们是否为同一对象(即进行内存地址的比较),所以必定要两个方法一起重写

  • HashMap用来判断key是否相等的方法:调用HashSet判断加入元素是否相等
    重载hashCode()是为了对同一个key,可以得到相同的hashCode,这样HashMap就可以定位到我们指定的key上;
    重载equals()是为了向HashMap表明当前对象和key上所保存的对象时相等的,这样我们才真正低获得了这个key所对用的这个键值对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值