news 2026/9/13 18:03:20

【大白话说Java面试题】【Java基础篇】第27题:为什么重写equals时必须重写hashCode方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【大白话说Java面试题】【Java基础篇】第27题:为什么重写equals时必须重写hashCode方法

📌大厂规范:Java项目工具类 — 13_雪花算法ID生成器(Java企业级代码)

第27题:为什么重写equals时必须重写hashCode方法

📚回答:

  • 背景知识
    根据Java规范,两个对象通过equals方法比较相等时,它们的hashCode值也必须相等。这是为了保证集合类(如HashMapHashSet)的正确性。

  • 问题原因
    如果只重写equals方法而不重写hashCode方法,可能导致以下问题:

    • equals返回true,但hashCode值不同。
    • 这会导致在集合类(如HashMap)中无法正确存储和查找对象。
  • 底层原理

    • HashMap等集合类通过hashCode计算元素的存储位置。
    • 如果两个对象equals相等但hashCode不同,它们会被存储在不同的位置,导致查找失败。

    💡代码示例
    以下代码展示了未重写hashCode的问题:

classPerson{privateStringname;publicPerson(Stringname){this.name=name;}@Overridepublicbooleanequals(Objecto){if(this==o)returntrue;if(o==null||getClass()!=o.getClass())returnfalse;Personperson=(Person)o;returnname.equals(person.name);}// 未重写hashCode方法}publicclassMain{publicstaticvoidmain(String[]args){Personp1=newPerson("Alice");Personp2=newPerson("Alice");System.out.println(p1.equals(p2));// 输出 trueSystem.out.println(p1.hashCode()==p2.hashCode());// 输出 false}}

💡解决方法
重写hashCode方法,确保equals相等的对象具有相同的hashCode值。例如:

@OverridepublicinthashCode(){returnObjects.hash(name);}

💡面试官视角

  • 面试官可能会问“为什么集合类依赖hashCode?”答:hashCode用于快速定位元素的存储位置,减少查找时间。
  • 面试官可能会追问“如何正确重写equalshashCode?”答:可以使用IDE生成工具,或者手动基于对象的关键属性实现一致性逻辑。

觉得对您有帮助,麻烦点点关注啦,您的关注是我创作的最大动力~ 🎯

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 18:00:35

RoboMaster电控硬件实战讲义:从炸机到可靠设计

1. 项目概述:这本讲义不是“教材”,而是RoboMaster电控工程师的实战备忘录“Robomaster硬件基础讲义V0.2.1”——看到这个标题,我第一反应不是去翻目录,而是下意识摸了摸自己工装裤口袋里那枚被磨得发亮的STM32F407最小系统板。它…

作者头像 李华
网站建设 2026/9/13 17:59:48

DenseNet鸟类细粒度分类:121/161/169/201四版本选型与PyTorch实战

简介:本资源是一个基于DenseNet系列(121/161/169/201)的鸟类图像多类别分类实战项目,面向深度学习初学者与计算机视觉实践者,聚焦图像识别任务中的模型选型、迁移学习与评估体系构建。项目完整实现训练、验证与多维度性…

作者头像 李华
网站建设 2026/9/13 17:59:47

右心室MRI分割:PyTorch定制U-Net实战指南

简介:本资源是一套基于PyTorch框架与U-Net网络结构实现心脏右心室医学图像分割的完整Python项目,面向计算机、人工智能、生物医学工程等专业的本科生及初阶研究者,适用于毕业设计、课程设计、期末大作业及医学图像分析入门实践。项目代码经本…

作者头像 李华
网站建设 2026/9/13 17:58:32

MySQL知识体系梳理

过往对MySQL的认识比较零碎,东一块西一块,经常忘记。最近花了点时间重新梳理了下,试图从整体的视角理解它,形成体系化的知识,这样既有助于记忆,也能够提升技术水平。内容是基于过往的工作经验,结…

作者头像 李华