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

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

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

  1. 一些面试者会回答因为hashcode相同,所以两个对象是相等的,HashMap将会抛出异常,或者不会存储它们。
    如果之前的问题回答的好,面试官的印象比较好,可能会提醒他们有equals()和hashCode()两个方法,并告诉他们两个对象就算hashcode相同,但是它们可能并不相等。
    如果掌握的不太好,一些面试者可能就此放弃。那下面的问题也就不了了之了,等于放弃了一个很好的机会。
    而这个问题的答案是:因为hashcode相同,所以它们的bucket位置相同,‘碰撞’会发生。因为HashMap使用链表存储对象,这个Entry(包含有键值对的Map.Entry对象)会存储在链表中。这个时候要理解根据hashcode来划分的数组,如果数组的坐标相同,则进入链表这个数据结构中了,一般的添加都在最前面,也就是和数组下标直接相连的地方,链表长度到达8的时候,jdk1.8上升为红黑树,这样说,无疑是直接的加分项。有的面试官直接跳入数据结构,有的会直接继续挖掘。

猜你喜欢

转载自blog.csdn.net/qq_43481265/article/details/84501701