首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
spring
less
string
substring
range
object
client
loops
foreach
command
bytecode
header
grid
python
require
php8
settings
flutter
timezone
default
vbscript
eval
export
window
express
schema
subset
hashtable
cookie
heatmap
testing
expression
nodejs
join
erlang
数组
version
scala
httpclient
node.js
buffer
char
const
php5
callback
future
tree
iostream
python2
web3
frameworks
merge
config
get
email
input
php
process
uml
ascii
javascript
copy
chat
io
uri
cpython
perl
hook
ip
actionscrip
go
python3
dll
triggers
tags
cSharp
c语言
filter
hashset
当前位置:
开发笔记
>
编程语言
> 正文
为什么重写equals方法必须重写hashCode
作者:嘿可爱无罪 | 来源:互联网 | 2023-05-18 01:59
自己学到这,就记录了下来,代码都是自己敲得,有不对的地方希望大神指点出来为什么重写equals方法必须重写hashCode如果你重写了equals,比如说是基于对象的内容实现的,而不重
自己学到这,就记录了下来,代码都是自己敲得,有不对的地方希望大神指点出来
为什么重写 equals 方法 必须重写 hashCode
如果你重写了equals,比如说是基于对象的内容实现的,而不重写 HashCode,那么很可能某两个对象明明是“相等”,而hashCode却不一样.那么就会返回 false。例如在 HashSet 集合中,不允许存在相同元素,但是当你 new 两个对象,对象内容相同时,在 HashSet 集合中就存在了相同的两个元素,如何解决这个问题?那就要重写 equals 方法,但是重写 equals 方法还不能解决问题,因为在 HashSet 中判断两个元素是否相等是首先判断 hashCode 内存地址是否相等,如果不等在用 equals 方法判断内容是否相等,由于 new 了两个对象,虽然内容相同,但是在内存中开辟两两块地址,hashCode 肯定不同,所以还要重写 hashCode 方法。
下面是代码说明
public class Person {
//随便定义个类
private int id;
private String name;
private int age;
//set get 方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//构造方法
public Person(int id,String name, int age) {
this.id=id;
this.name = name;
this.age = age;
}
//重写 hashCode 方法
public int hashCode() {
return this.getId();
}
//重写 equals 方法
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj instanceof Person){
if(this.getId()==((Person) obj).getId()){
return true;
}
}
return false;
}
}
测试类中代码
//实例化
Person p1 = new Person(1,"张三",12);
Person p2 = new Person(1,"张三",12);
// 声明 HashSet 集合类
HashSet
h = new HashSet
();
//添加数据
h.add(p1);
h.add(p2);
//遍历集合
for(Person per :h){
System.out.println(per.getName());
}
不重写 equals 和 hashCode 方法的执行结果
只重写 equals 方法的执行结果
重写 equals 和 hashCode 方法的执行结果
hash
hashcode
int
string
get
object
instance
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
object
探索equals()和hashCode()方法
探索equals()和hashCode()方法 在根类Object中,实现了equals()和hashCode()这两个方法,默认: equals()是对两个对象的地址值进行的比较(即比较引用是否 ...
[详细]
蜡笔小新 2023-08-14 07:32:42
object
用HashSet存储自定义对象
案例packagecn.itcast_02;importjava.util.HashSet;**需求:存储自定义对象,并保证元素的唯一性* ...
[详细]
蜡笔小新 2023-09-03 05:29:33
object
为什么等于和哈希码不影响哈希图大小
我正在尝试使用带有自定义类和哈希码方法的自定义类的哈希映射进行测试:publi ...
[详细]
蜡笔小新 2023-08-11 16:12:50
object
还要谈谈Equals和GetHashcode
这篇随笔和上篇随笔《从两个数组中查找相同的数字谈Hashtable》都是为了下面分析Dictionary的实现做的铺垫一.两个逻辑上相等的实例对象。两个对象相等,除了指两个不同变量引用了 ...
[详细]
蜡笔小新 2023-07-23 19:32:02
object
如何确保hashCode()与equals()一致? - How to ensure hashCode() is consistent with equals()?
Whenoverridingtheequals()functionofjava.lang.Object,thejavadocssuggestthat,当重写java.lang. ...
[详细]
蜡笔小新 2023-07-06 14:34:06
object
黑马程序员_HashCode与equals
-------------------------------------------------android培训、java培训期待与您交流!--------------------------- ...
[详细]
蜡笔小新 2023-06-10 15:49:23
string
java 散列与散列码探讨 ,简单HashMap实现散列映射表执行各种操作示列
java散列与散列码探讨,简单HashMap实现散列映射表执行各种操作示列packageorg.rui.collection2.maps;***散列与散列码*将土拔鼠对象与预报对象联系 ...
[详细]
蜡笔小新 2023-06-09 16:36:51
object
Java HashMap实现原理0——从hashCode,equals说起
Java集合类中常见的hashSet,hashMap,hashTable(现已很少用,几乎都采用hashMap替代)的实现都离不开散列表,而散列表的优势在于O(1)级别的查找,而has ...
[详细]
蜡笔小新 2023-06-08 12:50:11
python
开发笔记:加密&json&StringIO模块&BytesIO模块
篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ...
[详细]
蜡笔小新 2023-12-14 15:18:35
object
iOS实现UITextField+Limit的字符限制方法
本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ...
[详细]
蜡笔小新 2023-12-12 09:50:30
object
GTK+浅谈之十五GObject面向对象的继承
本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ...
[详细]
蜡笔小新 2023-12-10 12:33:04
foreach
在泛型字典类中使用foreach
本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ...
[详细]
蜡笔小新 2023-12-09 09:22:34
object
java可以配什么字符起名字_java中如何以给定的字符串为名字创建某个类的实例?...
展开全部可以用反射根据给定的类名来动态生成实例62616964757a686964616fe59b9ee7ad9431333337613839比如你定义了一个类packagesam ...
[详细]
蜡笔小新 2023-10-17 21:55:09
string
【总结】Effective java经验之谈,通用方法
转载请注明出处:http:blog.csdn.netsupera_liarticledetails45034203Effectivejava系列1.Effectivejav ...
[详细]
蜡笔小新 2023-08-08 18:54:10
object
Java中equals()与hashCode()的原理与设计
1.何时需要重写equals()当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。2.为什么改写equals()的时候,总是要改写hashCode()两个原则:hashCode()的返回& ...
[详细]
蜡笔小新 2023-06-24 15:48:40
嘿可爱无罪
这个家伙很懒,什么也没留下!
Tags | 热门标签
spring
less
string
substring
range
object
client
loops
foreach
command
bytecode
header
grid
python
require
php8
settings
flutter
timezone
default
vbscript
eval
export
window
express
schema
subset
hashtable
cookie
heatmap
RankList | 热门文章
1
如何用Notepad++录制宏
2
数据库对象包括哪六个?
3
oracle如何修改用户密码?
4
sql修改语句怎么写呢
5
sql是什么型数据库管理系统
6
数据库死锁产生的原因及解决方案是什么
7
.NET Core中如何使用Entity Framework操作PostgreSQL?
8
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
9
pandas对dataFrame中某一个列的数据进行处理的方法
10
详解PANDAS 数据合并与重塑(join/merge篇)
11
pandas数据拼接的实现示例
12
use jscript Create a SQL Server database
13
用jscript启动sqlserver
14
input 禁止输入特殊字符的四种实现方式
15
Node.js使用MongoDB的ObjectId作为查询条件的方法
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有