面试题:重写equals(),为什么还要重写hashcode()

news2025/1/12 6:15:47

认识equals():

Object类中的equals;

    public boolean equals(Object obj) {
        return (this == obj);
    }

当我们没有重写equals(),我们是调用父类object中的方法,比较的是对象的内存地址

重写equals后,

public class Student  {
    private int age;
    private String name;

    public Student() {
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

首先比较两个对象的内存地址,如果相同则返回true;

如果不相同,则比较对象的属性;对象的属性相同则返回true;

认识hashcode():

假如没有重写hashcode()通常返回的是对象内存地址取模后的哈希值

重写后:按一定的运算规则返回计算后的哈希值:通常情况下,对象相同,则返回相同的hash值

重写equals(),还要重写hashcode()的原因:

一:提高效率:考虑到 hashmap等哈希表结构中使用哈希码快速确定存储位置,方便高效;若发生hash冲突,再调用对象的equals()方法比较;

二:保持一致性:只重写equals()而没有重写hashcode();即使两个对象:x.equals(y)==true

也无法保证x.hashcode()==y.hashcode();在使用哈希表等数据结构时,无法找到正确对象从而导致一些意外;

因此既要重写equals(),又要重写hashcode();

举个例子:

Student类没有重写hashcode:

public class Student  {
    private int age;
    private String name;

    public Student() {
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }
}

测试类:

    public static void main(String[] args) {
        Student s1 = new Student(18, "张三");
        Student s2 = new Student(18, "张三");

        HashMap<Student, Integer> hashMap = new HashMap<>();
        hashMap.put(s1,100);
        System.out.println("---------------");
        System.out.println(s1.equals(s2));
        System.out.println("--------------");
        System.out.println("s1的哈希值:"+s1.hashCode());
        System.out.println("s2的哈希值:"+s2.hashCode());
        System.out.println(hashMap.get(s2));

    }

结果为:

返回结果为:null

说明了即使两个对象equals()比较相同;也不能保证通过new Student(18,"张三")找到对应的value;因为s1,s2的哈希值不相同;

那么就不无法保证hashmap中元素的唯一性:因为相同的对象经过hash运算可以映射到不同槽位上,

那么就可以存储:(s1,100),s1(s1,100)

这不就是矛盾吗?

若我们重写了hashcode()方法:

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }

输出结果为:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1589175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯嵌入式(G431)备赛笔记——DMA+UART

目录 CubeMX配置&#xff1a; 代码配置: DMA通道接收&#xff1a; DMA通道发送&#xff1a; 注意&#xff1a; 主函数中记得开启串口接收回调函数&#xff1a; 加了DMA的UART接收通道和一般的区别&#xff1a; 加了DMA的UART发送和一般的区别&#xff1a; CubeMX配置&…

Day23_学点儿Java_多态复习

1 做错的选择题 Java中的多态性是通过以下哪个机制实现的&#xff1f;&#xff08;&#xff09; A. 方法重载 B. 方法覆盖 C. 抽象类 D. 接口2 多态复习 2.1 学点儿Java_Day7_继承、重载、重写、多态、抽象类 2.2 面向对象四大基本特征 封装、抽象、继承、多态 封装 面向…

【翻译】再见, Clean Code!

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 【翻译】再见, Clean Code!正文那是一个深夜次日早晨这只是一个阶段 【翻译】再见…

CTF-SHOW SSRF

web351 存在一个flag.php页面&#xff0c;访问会返回不是本地用户的消息&#xff0c;那肯定是要让我们以本地用户去访问127.0.0.1/flag.php web352 代码中先判断是否为HTTP或https协议&#xff0c;之后判断我们传入的url中是否含有localhost和127.0.0&#xff0c;如果没有则…

JAVA集合ArrayList

目录 ArrayList概述 add(element) 用法 add(index, element)用法 remove&#xff08;element&#xff09;用法 remove&#xff08;index&#xff09;用法 get(index)用法 set(index,element) 练习 test1 定义一个集合&#xff0c;添加字符串&#xff0c;并进行遍历&…

【JavaWeb】Day42.MySQL概述——多表查询

介绍 多表查询&#xff1a;查询时从多张表中获取所需数据 单表查询的SQL语句&#xff1a;select 字段列表 from 表名; 如果要执行多表查询&#xff0c;只需要使用逗号分隔多张表即可&#xff0c;如&#xff1a; select 字段列表 from 表1, 表2; 例如&#xff1a;查询…

解决mac本git安装后找不到命令的问题

不熟悉mac配置&#xff0c;折腾了半天&#xff0c;记录一下。 1.问题描述2.解决方法 1.问题描述 从https://sourceforge.net/projects/git-osx-installer/files/下载的git安装包&#xff1a; 安装时提示&#xff1a; 这里的解决办法是按住control键再打开文件安装。 安装完…

数据分析案例(一):地区收入的PCA主成分分析

练习1 地区收入的PCA主成分分析 0.变量说明 1.导包操作 核心思路&#xff1a;导入基础数据操作库包&#xff0c;PCA、k-means 库包&#xff0c;数据可视化库包 import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.preprocessing i…

补体系统研究解决方案BioPorto补体抗体

靶点研究新热点&#xff1a;补体系统 21世纪以来&#xff0c;人们对补体的认识从基于血液的抗菌素系统逐步转变为免疫和组织稳态的全局调节器。近年&#xff0c;对补体激活机制、结构、功能方面的研究更是取得了显著的进展&#xff0c;令补体系统研究跻身热门研究主题之一。 补…

基于SSM新疆旅游管理系统的设计与实现(内附设计LW + PPT+ 源码下载)

摘 要 随着经济的飞速发展人们对于旅游的热衷度也日益提升&#xff0c;新疆因特殊的地理优势具备了天然的旅游资源&#xff0c;天山山脉将新疆的地理区域划分为了南疆和北疆&#xff0c;北疆因气候湿润且河流草场较多造就了得天独厚的自然旅游资源&#xff0c;南疆沙漠广布且…

图像JPEG压缩(附python代码)

JPEG压缩是一种有损压缩技术&#xff0c;常用于数字图像。它通过减少图像文件大小来实现压缩&#xff0c;但会造成一定程度的图像质量损失。 目录 一、JPEG压缩1.1 JPEG压缩原理1.2 JPEG压缩优点1.3 JPEG压缩缺点 二、图像退化中加入JPEG压缩2.1 优势2.1.1 更逼真的模拟2.1.2 提…

OceanMind海睿思助力企业“数据入表”经济利益流入与生命周期管理

通过多年信息系统的建设与应用&#xff0c;企业积累了大量的数据。同时随着时间的推进&#xff0c;数据规模正以加速度快速增长。从国家到企业&#xff0c;都越来越关注所拥有的数据资源及其蕴含的深厚价值。很多企业已经逐渐认知到数据是重要的战略资源&#xff0c;数据资产化…

Acwing.3999 最大公约数(gcd欧拉函数)

题解 给定两个正整数 a,m&#xff0c;其中 a<m。 请你计算&#xff0c;有多少个小于 m 的非负整数 x满足&#xff1a; gcd(a,m)gcd(ax,m) 输入格式 第一行包含整数 T &#xff0c;表示共有 T 组测试数据。 每组数据占一行&#xff0c;包含两个整数 a,m 。 输出格式 每…

2024年第十四届MathorCup数学应用挑战赛C题解析(更新中)

2024年第十四届MathorCup数学应用挑战赛C题解析&#xff08;更新中&#xff09; 题目题目解析(更新中&#xff09;问题一问题二问题三 题目 C题 物流网络分拣中心货量预测及人员排班电商物流网络在订单履约中由多个环节组成&#xff0c;图1是一个简化的物流 网络示意图。其中&a…

UI自动化测试案例

备注:本文为博主原创文章,未经博主允许禁止转载。如有问题,欢迎指正。 个人笔记(整理不易,有帮助,收藏+点赞+评论,爱你们!!!你的支持是我写作的动力) 笔记目录:笔记本~笔记目录_airtest和selenium那个好用-CSDN博客 个人随笔:工作总结随笔_8、以前工作中都接触过哪…

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(下)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分&#xff0c;上部将首先简要介绍方法工作…

如何处理ubuntu22.04LTS安装过程中出现“Daemons using outdated libraries”提示

Ubuntu 22.04 LTS 中使用命令行升级软件或安装任何新软件时&#xff0c;您可能收到“Daemons using outdated libraries”&#xff0c;“Which services should be restarted?”的提示&#xff0c;提示下面列出备选的重启服务&#xff0c;如下。 使用以下命令&#xff0c;能够…

【C】动态规划 之 多维最大最小路径和

总结一下这类题型的思路&#xff1a; 每一步所求的最优解 上一步的最优解 这一步的情况 1.数字三角形 主要思路&#xff1a; 1.到达每一个位置的最大和等于前一步最大和加上这一位置的值&#xff0c;而前一步要么是从左上下来&#xff0c;要么是从右上下来&#xff0c;这样…

如何应对app应用程序或者网站常见的几种攻击类型

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天&#xff0c;我想和大家聊聊一个我们日常生活中经常遇到的问题——如何应对app或者网站常见的几种攻击类型。随着互联网的普及&#xff0c;app和网站已经成为我们获取信息、交流互动的重要平台。然而&#xff0c;这些平台也时常…

障碍物识别技术赋能盲人独立出行:一场静默的科技革新

作为一名资深记者&#xff0c;我始终关注并报道那些科技如何助力特殊群体克服生活挑战的动人故事。近期&#xff0c;一款叫做蝙蝠避障的应用进入了我的视线&#xff0c;它搭载先进障碍物识别技术以其独特的优势&#xff0c;悄然为视障人士的独立出行带来了显著变革。 “障碍物识…