面试中问到当两个对象的hashcode相同会发生什么

当两个对象的hashcode相同会发生什么

【这个问题基本上就是分界点了】

  1. 一些面试者会回答因为hashcode相同,所以两个对象是相等的,HashMap将会抛出异常,或者不会存储它们。
    如果之前的问题回答的好,面试官的印象比较好,可能会提醒他们有equals()和hashCode()两个方法,并告诉他们两个对象就算hashcode相同,但是它们可能并不相等。
    如果掌握的不太好,一些面试者可能就此放弃。那下面的问题也就不了了之了,等于放弃了一个很好的机会。
    而这个问题的答案是:因为hashcode相同,所以它们的bucket位置相同,‘碰撞’会发生。因为HashMap使用链表存储对象,这个Entry(包含有键值对的Map.Entry对象)会存储在链表中。这个时候要理解根据hashcode来划分的数组,如果数组的坐标相同,则进入链表这个数据结构中了,一般的添加都在最前面,也就是和数组下标直接相连的地方,链表长度到达8的时候,jdk1.8上升为红黑树,这样说,无疑是直接的加分项。有的面试官直接跳入数据结构,有的会直接继续挖掘。
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Java中,`equals()`和`hashCode()`方法是用于比较对象两个重要方法。`equals()`方法用于判断两个对象是否相等,而`hashCode()`方法用于返回对象的哈希码。在使用集合类(如HashSet、HashMap等)时,需要重写`equals()`和`hashCode()`方法来确保对象能够正确地被比较和存储。 如果不重写这两个方法,那么默认情况下,比较的是对象的引用,而不是对象。这意味着即使对象的属性相同,如果它们的引用不同,它们也被认为是不相等的。这显然不符合我们的预期。 因此,重写`equals()`和`hashCode()`方法可以确保对象能够正确地被比较和存储,并且能够在集合类中正常工作。在重写`equals()`方法时,需要注意以下几点: - 对称性:如果a.equals(b)返回true,那么b.equals(a)也应该返回true。 - 自反性:a.equals(a)应该返回true。 - 传递性:如果a.equals(b)返回true,b.equals(c)也返回true,那么a.equals(c)也应该返回true。 - 一致性:多次调用a.equals(b)应该返回相同的结果,前提是两个对象没有发生变化。 - 对null的处理:a.equals(null)应该返回false。 在重写`hashCode()`方法时,需要确保: - 如果两个对象相等,它们的hashCode()方法返回的应该相同。 - 如果两个对象不相等,它们的hashCode()方法返回的应该尽可能不同,以提高哈希表的性能。 总之,在Java中,重写`equals()`和`hashCode()`方法是程序员必须掌握的基本技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值