当前位置:网站首页>hashCode()与equals()之间的关系
hashCode()与equals()之间的关系
2022-07-06 09:20:00 【快醒醒鸭今天你编程了吗?】
在java中,每一个对象可以调用自己的hashcode()方法得到自己的哈希值
- 如果两个对象的hashcode不相同,那么这两个对象肯定是不同的两个对象
- 如果两个对象的hashcode相同,不代表这两个对象一定是同一个对象,也可能是两个对象
- 如果两个对象相等,那么他们的hashCode就一定相同
在java的一些集合类的实现类中,在比较两个对象是否相等的时候,会根据上面的原则,会先调用对象的hashCode()方法得到hashCode进行比较,如果hashCode不相同就可以直接认为这两个对象不相同,如果hashCode值相同,那么就会进一步调用equals()方法进行比较,而equals()方法,就是用来最终确定两个对象是不是相等,通常equals实现会比较重,逻辑比较多,而hashCode()主要就是得到一个哈希值,实际上就是一个数字,相对而言比较轻,所以在比较两个对象的时候,通常会先用hashCode
注意:我们重写了equals()方法,那么就要注意hashCode()方法,一定要保证能遵守上述规则。
如下图:
package com.ws;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<User,String> hashMap = new HashMap<>();
hashMap.put(new User("wangshun"),"123");
System.out.println(hashMap.get(new User("wangshun")));
}
}
class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName(){
return name;
}
@Override
public boolean equals(Object obj) {
User user = (User) obj;
return user.getName().equals(this.name);
}
}
没重写hashcode之前运行结果为null
package com.ws;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<User,String> hashMap = new HashMap<>();
hashMap.put(new User("wangshun"),"123");
System.out.println(hashMap.get(new User("wangshun")));
}
}
class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName(){
return name;
}
@Override
public boolean equals(Object obj) {
User user = (User) obj;
return user.getName().equals(this.name);
}
@Override
public int hashCode() {
return name.hashCode();
}
}
重写hashcode之后为123
边栏推荐
- TYUT太原理工大学2022数据库大题之概念模型设计
- String class
- Wei Pai: the product is applauded, but why is the sales volume still frustrated
- 魏牌:产品叫好声一片,但为何销量还是受挫
- Questions and answers of "basic experiment" in the first semester of the 22nd academic year of Xi'an University of Electronic Science and technology
- Data manipulation language (DML)
- 初识C语言(上)
- (超详细onenet TCP协议接入)arduino+esp8266-01s接入物联网平台,上传实时采集数据/TCP透传(以及lua脚本如何获取和编写)
- 4. Binary search
- 系统设计学习(二)Design a key-value cache to save the results of the most recent web server queries
猜你喜欢
Interview Essentials: talk about the various implementations of distributed locks!
7.数组、指针和数组的关系
2-year experience summary, tell you how to do a good job in project management
最新坦克大战2022-全程开发笔记-1
Database operation of tyut Taiyuan University of technology 2022 database
2.C语言初阶练习题(2)
5.MSDN的下载和使用
魏牌:产品叫好声一片,但为何销量还是受挫
C语言实现扫雷游戏(完整版)
3.猜数字游戏
随机推荐
初识C语言(下)
阿里云微服务(二) 分布式服务配置中心以及Nacos的使用场景及实现介绍
Inheritance and polymorphism (I)
4.30动态内存分配笔记
View UI Plus 发布 1.1.0 版本,支持 SSR、支持 Nuxt、增加 TS 声明文件
3.输入和输出函数(printf、scanf、getchar和putchar)
Alibaba cloud microservices (I) service registry Nacos, rest template and feign client
arduino+水位传感器+led显示+蜂鸣器报警
C语言实现扫雷游戏(完整版)
2. Preliminary exercises of C language (2)
Small exercise of library management system
Alibaba cloud side: underlying details in concurrent scenarios - pseudo sharing
System design learning (I) design pastebin com (or Bit.ly)
Share a website to improve your Aesthetics
[中国近代史] 第六章测验
Set container
Decomposition relation model of the 2022 database of tyut Taiyuan University of Technology
4.分支语句和循环语句
图书管理系统小练习
(超详细二)onenet数据可视化详解,如何用截取数据流绘图