【lab2】关于Equals和HashCode重写

软件构造Lab4实验总结—spotbugs 在实验四中要求使用spotbugs发现并修改软件中的bug,故我在本篇文章中简要记录一下spotbugs的使用的以及一些常规的bug及其处理。 1、简介: SpotBugs是Findbugs的继任者,用于对代码进行静态分析,查找相关的漏洞。  目前SpotBugs 3.1.3 自带检测器,其中有90余种Bad practice,155余种Correctness,9种Experimental, 2种 Internationalization,17种Malicious code vulnerability,46 阅读详情

为什么要重写Equals和HashCode?

每当我们定义一个immutable类的时候,就应该考虑重写其Equals和HashCode

​ 一个immutable类,创造两个对象A,B; A和B有着一模一样的内容,但是由于内存地址的不同,我们用"==“或者是缺省的equals(内部实现还是”= ="),是不能够得出他们相等的。

​ 如果要想他们在外界看来是一样的,那就要重写类中的equals函数,而HashCode也应该随之重写。

​ 因为:如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同 ref

对于mutable的类,我们不必管Equals和HashCode,直接使用默认的即可

如何重写Equals和HashCode?

​ 例子:

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || this.getClass() != obj.getClass()) return false;
        Person person = (Person) obj;
        return name.equals(person.name);
    }

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

[reference :]

重写hashcode方法 | Tanthen

HashMap什么时候重写hashcode和equals方法,为什么需要重写_Keith003的博客-优快云博客

为什么使用HashMap需要重写hashcode和equals方法?_hxt的博客-优快云博客_为什么要重写hashcode和equals方法

Java中hashCode的作用

哈工大软构课Lab2源码包:用Java实现社交好友图与最短路径计算 哈尔滨工业大学2022年《软件构造》课程第二次实验完整工程,基于Java实现图结构建模与社交关系分析。包含两个核心模块:P1中FriendshipGraph类以无向图形式管理用户及好友关系,支持添加人员、建立连接、查询最短路径(BFS实现);P2中Person类封装人物属性,并配合JUnit测试用例验证图操作逻辑的正确性。项目采用标准Maven/IDEA结构,src目录下按poet和graph子包组织代码,test目录提供完整单元测试覆盖,out目录存放编译结果,.iml等配置文件已就绪,可直接导入Inte 阅读详情

相关推荐

用友U8库龄分析避坑指南:物料出入库日期计算的5个常见错误

本文深入剖析了在用友U8系统中进行库龄分析时,物料出入库日期计算的五个常见陷阱。从数据源选择、业务类型过滤、计价方式逻辑、期初数据处理到查询性能优化,逐一解析错误根源并提供避坑指南,帮助企业获得准确的库龄数据,有效管理库存与资金风险。

weixin_29209801的博客 456

java immutable类重写equals和hashCode函数

一般immutable类都需要重写equals和hashCode函数。这两个函数继承自Object基类 例如一个代表边的泛型类,认为如果起点终点权重相等的边等价,hashCode采用起点终点权重的hashCode乘质数相加的方法。 如下: 接收任意一个类的对象,首先要判断它是一个Edge对象,然后由于Edge是泛型类,还需要在强制类型转换时加上"<?>" /** * Override equals * @param obj an object expected to be E

m0_46888681的博客 260

《小白入门:无人机电调 ESC 的 PWM 接口特性、主流协议与使用指南》

电调是无人机的 “动力中枢”,其 PWM 接口是入门的基础,而 SBUS、DroneCAN 等协议则代表了更高阶的控制方式。小白学习时,需先掌握 PWM 的基本特性和连接方法,再根据场景选择合适的协议,同时严格遵守使用注意事项(如电源匹配、校准步骤、安全操作)。随着实践深入,逐步理解 “协议差异” 和 “系统协同”,才能让无人机更稳定、安全地飞行。

bother3000的博客 3769

不可变类(immutable class)

不可变类,顾名思义就是说类的实例是不可被修改的。实例的信息是在创建的时候提供,并且在整个生命周期中都不可改变。 大家都知道Java的String类是immutable。其实primary的包装类都是immutable的。那么如果让你设计和immutable的class要怎么做呢? immutable 也就是不变的意思。不可改变的。怎么样让一个类的对象不变呢? 第一你肯定想到,这个类不能被继承...

JackyCheng2007 1020

EEG | CHB-MIT癫痫数据集CNN分类实战(一)

CHB-MIT癫痫数据集CNN分类实战

Always learn from the best. 1万+

DJI MobileSDK运行实例代码教程(保姆级)坑踩完了

其中比较重要的是PackageName也就是我们应用的包名,在这里我们可以直接使用官方文档中的包名,com.dji.ImportSDKDemo,appname为:ImportSDKDemo,其他的可以随意。在C盘中根据路径先找到 “用户/admin/.gradle”下的.gradle文件夹,然后依次打开wrapper/dists文件夹,找到我们刚刚要下载的gradle版本名的文件夹。在Androidstudio中打开,选在打开项目选择文件下载后的保存路径(解压之后的),在打开项目后会自动下载gradle。

k1121568的博客 2863

HIT SC lab2个人回顾

公元2022年5月29日,Csapp考试当天,我们的软构实验二迎来了他的ddl。作为与考试内容密切相关的一次实验,做一次小小的总结。 关于ADT与OOP ADT和OOP是软构体系中重要的一环,之前也只是停留在了理论表面和一些简单的选择题,这次亲自上手实操也是体会到了一些容易出错的地方。首先就是AF,AF完成了从R空间向A空间的映射,A空间是客户看到的内容,因此要格外注意不能暴露表示。不过实际操作发现一不小心就暴露了,,,看了几个例子才知道怎么拐弯抹角。然后就是RI的问题。某次实验课上老师提到,其他类做的

m0_52200890的博客 284

Ansys Zemax与Speos协同设计:HUD系统从光学优化到驾驶视觉验证全流程解析

本文详细解析了如何利用Ansys Zemax与Speos协同工作流,完成HUD系统从光学内核优化到驾驶视觉验证的全流程。通过Zemax进行精密光学设计与像差校正,再通过Speos进行HOA定量分析和虚拟驾驶舱仿真,实现了数据无损流转与验证闭环,有效解决了光学性能与视觉感知脱节的核心问题,显著提升HUD设计效率与可靠性。

git9versioner的博客 530

软件构造Lab2笔记+心得

** 软件构造Lab2笔记+心得 ** Lab2主要训练ADT的设计、规约以及测试。 ADT中的几个基本概念: **表示不变量(representation invariant)????*指的是该ADT的表示永远应该具备的性质,就比如说设计一个三角形的ADT,三条边、内角和180度都应该成为该ADT的表示不变量。这个概念在衡量该ADT的固有属性。 **抽象函数AF(Abstraction Functio...

weixin_44819348的博客 248

vivado生成及调用自定义IP的方法

开发环境:vivado 2018.2 1.将整个工程封装为自定义IP 将整个工程封装为自定义IP主要有以下步骤: 步骤1.选中工程中的top模块。点击Tools ------> Create and Package New IP,如图1所示 图1 步骤2.弹出界面后,点击next至图2界面,选择Package your current project,然后继续点击next 图2 步骤3.选择生成的IP路径,如图3所示。这个路径就是后续添加该IP的路径 图3 步骤4.继续点击next,然后选择fi

进击的阿日比 4733

解锁RK3588多屏异显:MIPI+HDMI+EDP混合输出全攻略

本文详细介绍了RK3588处理器在MIPI+HDMI+EDP混合输出配置中的技术实现与应用。作为一款高性能处理器,RK3588凭借其强大的图形处理能力,支持多屏异显功能,可满足智能安防、工业控制等领域的多屏显示需求。文章从硬件连接、设备树配置、内核驱动设置到显示参数调整,系统阐述了配置流程,并针对信号不稳定、显示模式不匹配等常见问题提供了解决方案。通过智能安防监控案例,展示了该技术在提高监控效率方面的实际应用价值。随着技术进步,RK3588多屏异显技术将在更多领域发挥重要作用,为开发者提供灵活多样的显示方案

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2434

软件构造随笔四-hashcode方法的重写

之前一直忙于完成lab3及报告,距上一次发博客过了好长时间。 在本次博客里,主要想分享一下我在lab3中学到和应用到的知识。 hashcode方法的重写 在之前的实验和课程中,都或多或少地接触到了需要重写equals方法的地方,不过在之前为了方便起见,我都是 采用等价的字符串比较来代替,但在lab3中,一是有些类的比较确实需要equals方法,二是为了学点新知识,我选 择重写equals方法和hashcode方法。 在我目前见过的情况中,重写hashcode方法一般都是因为重写了equals方法,对equa

ZekeJaeger的博客 305

高通平台 Android T 蓝牙技术全解析:架构、代码与实现原理

协议栈、配置文件和服务都运行在一个独立的用户空间进程。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 100

lab2问题

对接口认识不足 浅谈Java接口 https://baijiahao.baidu.com/s?id=1581222739674858335&wfr=spider&for=pc 构造字符串的方法 https://baijiahao.baidu.com/s?id=1620369353038714999&wfr=spider&for=pc String、StringBuf...

sinat_41800381的博客 383

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

软件构造Lab1,Lab2总结

软件构造lab1lab2的思考

hxhx2009_2020的博客 302

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java 中在Lab2_实验 中遇到的问题 关于equals hashcode 和==

==  我在实验中碰到了这样的一个问题,在进行两个类的比较的时候,我错用成了==,这导致我的程序一直出现bug,其原因就是这个if语句一直不能够通过。    关于==首先要明确java中的基本的数据类型 他和C语言的个人感觉没有区别 byte,short,char,int,long,float,double,boolean  对于比较他们,我们用 ==比较的是他们的值。而对于类,数组 我们用==去...

weixin_41145325的博客 241

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

针对lab5的优化

在经过反复修改轨道系统代码,发现关键的一点,一个好的hashcode可以大大提高hashMap的性能。比如我重写了Track的hashcode大大提高了我创建行星系统的速度。 可以直接用eclipse自带的重写hashcode和equals的方法 在Source->Generate hashcode and equals ...

qq_43577590的博客 278

【无标题】软构Lab2遇到的问题及解决

一些问题

hihihi99的博客 358

lab2参考

EclEmma https://www.eclemma.org/installation.html 关于Eclipse中配置eclemma的方法总结 https://blog.youkuaiyun.com/weixin_38946532/article/details/79524787 浅谈Java接口 https://baijiahao.baidu.com/s?id=1581222739674858335&...

sinat_41800381的博客 423

软件构造Lab2小结

软件构造Lab2的主题也是我们课程的重点,ADT and OOP,即Abstract Data Type抽象数据类型和Object-Oriented Programming面向对象编程。本次实验训练抽象数据类型(ADT)的设计、规约、测试,并使用面向对象编程(OOP)技术实现 ADT。具体来说:⚫ 针对给定的应用问题,从问题描述中识别所需的 ADT; ⚫ 设计 ADT 规约(pre-condition、post-condition)并评估规约的质量; ⚫ 根据 ADT 的规约设计测试用例; ⚫ ADT 的泛

weixin_56782544的博客 344

Object类相关知识

万类之源 Object类 序言 由于软件构造实验lab2 和 Lab3中大量用到object类相关方法并且后续博客中也有涉及object得知识,对object类进行一点总结。 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。 简单来说就是,Object类是所有类的父类,包括我们所写的类,我们每次新定义一个类得时候 比如实验二中得棋子,实验三中得航班,车厢,都是继承自Object类而来,因此 我们自己定义的类就包含了 Object类的方法和特

weixin_43124813的博客 253

HIT软件构造 blog3

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言LAB2学习之重写equals hashcode(一)前言复习——什么是等价性等价性的划分引用等价性与对象等价性的概念—— == 和 equals()对象等价性equals()(二)、可变类型与不可变类型的判相等(三)、重写而不是重载!instanceof 是什么?(四)、可变类型的等价性观察等价性和行为等价性 前言 现在已经做完lab2了,这篇博客里总结一下在lab2中用到的一些知识,顺带复习一下 提示:以下是本篇文章正.

thegreenhand的博客 263

软构实验lab3过程遇到的几个问题及其学习理解

哈工大软构实验3的一些知识、问题及解决

qq_59186302的博客 237

实验踩坑记录:Java迭代器iterator无法remove、remove失败原因以及Iterator源码分析

Java Set 迭代器iterator无法remove、remove失败原因 在Java开发过程中遇到一个问题,调用Set的iterator.remove函数时无法删除,且未报错,但是单步运行时发现所比较对象时完全相同的,根据重写的equals()函数也可判断相同,以下为原代码: public static boolean removePiece(Player player, Piece p...

TWW 4702

2021-06-15

重写Object方法——equals、hashCode Object类中的equals和hashCode Object类中的equals和hashCode是我们默认使用的方法。java中判断两个对象相等时有如下规则: 1)判断两个对象的hashCode是否相等 如果不相等,认为两个对象不相等 2)如果相等,则判断两个对象用equals运算是否相等 如果不相等,认为两个对象不相等 如果相等,认为两个对象相等 在Object类中,equals方法判断两个引用是否指向同一对象,其与运算符"=="类似,然而很多类中

yangzhongbo7的博客 160

软件构造blog3

关于重写equals方法和hashCode方法 在Lab3中,自己设计了Employee,Process,Course三个类分别来表示职工、进程、课程。并且在其他类中用到了对这三个类的对象进行判相等的操作,这就需要重写equals方法以及hashCode方法。 equals()和hashCode()这两个方法属于Object类,而Object类是所有类的父类,因此所有的类都继承了这两个方法。Object类的equals()方法代码如下: public boolean equals(Object ob

TC_Ning的博客 231
上一篇: 【lab2】scanner读文件
下一篇: 【总结】ADT
Pin_BOY
博客等级 码龄7年 282粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值