当前位置:网站首页>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
边栏推荐
- 9.指针(上)
- 【九阳神功】2019复旦大学应用统计真题+解析
- 凡人修仙学指针-1
- MPLS experiment
- View UI plus released version 1.2.0 and added image, skeleton and typography components
- MySQL limit x, -1 doesn't work, -1 does not work, and an error is reported
- 阿里云微服务(三)Sentinel开源流控熔断降级组件
- 分支语句和循环语句
- E-R graph to relational model of the 2022 database of tyut Taiyuan University of Technology
- string
猜你喜欢
TYUT太原理工大学2022数据库大题之概念模型设计
20220211-CTF-MISC-006-pure_ Color (use of stegsolve tool) -007 Aesop_ Secret (AES decryption)
1.初识C语言(1)
魏牌:产品叫好声一片,但为何销量还是受挫
arduino+DS18B20温度传感器(蜂鸣器报警)+LCD1602显示(IIC驱动)
MPLS experiment
Relational algebra of tyut Taiyuan University of technology 2022 database
Alibaba cloud microservices (II) distributed service configuration center and Nacos usage scenarios and implementation introduction
Summary of multiple choice questions in the 2022 database of tyut Taiyuan University of Technology
Cloud native trend in 2022
随机推荐
Tyut Taiyuan University of technology 2022 introduction to software engineering summary
Set container
vector
There is always one of the eight computer operations that you can't learn programming
Change vs theme and set background picture
System design learning (I) design pastebin com (or Bit.ly)
MySQL limit x, -1 doesn't work, -1 does not work, and an error is reported
What are the advantages of using SQL in Excel VBA
图书管理系统小练习
MySQL 30000 word essence summary + 100 interview questions, hanging the interviewer is more than enough (Collection Series
Tyut Taiyuan University of technology 2022 introduction to software engineering examination question outline
System design learning (III) design Amazon's sales rank by category feature
4.分支语句和循环语句
First acquaintance with C language (Part 1)
西安电子科技大学22学年上学期《信号与系统》试题及答案
Wei Pai: the product is applauded, but why is the sales volume still frustrated
7. Relationship between array, pointer and array
Questions and answers of "basic experiment" in the first semester of the 22nd academic year of Xi'an University of Electronic Science and technology
6. Function recursion
Relational algebra of tyut Taiyuan University of technology 2022 database