面试题:有没有可能两个不相等的对象有有相同 hashcode ?

答案:有可能

解释:

  1. 哈希冲突
    • hashCode() 是一个 int 类型的值,范围是有限的(-2^31 到 2^31-1)。
    • 对象的可能值是无限的(尤其是自定义对象),因此不同的对象可能会生成相同的哈希码,这种现象称为哈希冲突
  2. 哈希码的设计
    • hashCode() 的设计目标是尽可能均匀分布,以减少冲突的概率,但无法完全避免冲突。
    • 例如,String 类的 hashCode() 实现虽然很优秀,但仍然存在不同字符串生成相同哈希码的情况。
  3. equals() 的作用
    • 当两个对象的 hashCode() 相同时,哈希表(如 HashMap)会进一步调用 equals() 方法来确认它们是否真的相等。
    • 如果 equals() 返回 false,则说明这两个对象不相等,即使它们的 hashCode() 相同。

示例:

String str1 = "FB";
String str2 = "Ea";

System.out.println(str1.hashCode()); // 输出: 2236
System.out.println(str2.hashCode()); // 输出: 2236
System.out.println(str1.equals(str2)); // 输出: false

在这个例子中:

  • str1 和 str2 的 hashCode() 相同(都是 2236),但它们的 equals() 比较结果为 false,说明它们是不同的对象。

总结:

  • 两个不相等的对象完全有可能拥有相同的 hashCode,这是哈希冲突的必然结果。
  • 哈希表通过 hashCode() 快速定位对象,但最终依赖 equals() 来确认对象的唯一性。
  • 设计良好的 hashCode() 方法可以减少冲突,但无法完全避免。
THE END
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容