zoukankan      html  css  js  c++  java
  • 面试必问系列——重写equals为什么一定要重写hashcode

      重写equals为什么一定要重写hashcode,这个问题可以说是很经典的问题了,早几年我们一般都是这样回答的:因为equals相等的话,hashcode一定相等,如果hashcode相等的话,equals不一定相等,这是java规范规定的。没错,这就是老鳖的屁股,龟腚(规定),但是随着近年来就业难度的提升,这样的回答已经是错误的,或者你这样说,面试官会觉得你是一个半吊子,一知半解,所以楼主最近整理了一下资料,总结了至少今年回答还算是正确的答案。

      面试官扶了一下已经生青锈的眼镜,斜看了一下惶恐不安的你

      面试官:我们重写equals为什么一定要重写hashcode?

      我:因为java规范规定,equals相等的话,hashcode一定相等,如果hashcode相等的话,equals不一定相等

      面试官:就这,出门左拐走楼梯下去

      我拉着面试官刚擦过鼻涕的袖子,哭着说:求求你循序渐进的引导我吧,我不装逼了

      面试官:咳!你说的规定都有什么?

      我:自反性、对称性、传递性、一致性、非空性

      面试官:那为什么要这样规定呢?如果我不重写hashcode会出现什么情况?

      我:如果不重写hashcode,在map中put两个equals相等的key时,应该只存在一个键值对,后put的覆盖前面put的value,但是put方法判断key相等的条件是 hash、==和equals 由于hashcode不相等,判断条件不成立导致出现两个键值对。

      

    总结:其实我们之前的回答是没问题的,但是没有深度,所以我们回答的时候需要把具体的规定和实际的使用场景带上。而且这里提到了hashmap,那不仅回答了这个问题,还对面试官带有一定的引导性,面试官大概率会接着问你hashmap相关的问题了,引导面试官问一些自己擅长的问题,而不是被面试官牵着鼻子走,毕竟你也不知道,面试官还有多少压箱底的偏题在等着你。下一篇:hashmap扩容阈值和链表转红黑树阈值问题

  • 相关阅读:
    changing a pointer rather than erasing memory cells
    验证码识别 edge enhancement 轮廓增强 region finding 区域查找
    Manipulating Data Structures
    passing parameters by value is inefficient when the parameters represent large blocks of data
    Aliasing 走样
    Artificial Intelligence Research Methodologies 人工智能研究方法
    Thread safety
    include pointers as a primitive data type
    flat file
    functional cohesion
  • 原文地址:https://www.cnblogs.com/wudb/p/12979995.html
Copyright © 2011-2022 走看看