没有合适的资源?快使用搜索试试~ 我知道了~
Java中的equals和hashCode方法详解1
需积分: 0 0 下载量 178 浏览量
2022-08-08
17:51:46
上传
评论
收藏 14KB DOCX 举报
温馨提示
试读
2页
如果一个类的hashCode()方法没有遵循上述要求,那么,当这个类的两个实例对象用equals()方法比较的结果相等时,他们本来应该无法被同时存储进set集合
资源详情
资源评论
资源推荐
Java 中的 equals 方法和 hashCode 方法是 Object 中的,所以每个对象都是有这两个
方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两
个方法的作用。
equals()和 hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如 set 存放同
一类对象时用来判断放入的对象是否重复。
这里我们首先要明白一个问题:
equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并
不能证明他们的 hashcode()不相等。换句话说,equals()方法不相等的两个对象,
hashCode()有可能相等。(我的理解是由于哈希码在生成的时候产生冲突造成的)
在这里 hashCode 就好比字典里每个字的索引,equals()好比比较的是字典里同一个
字下的不同词语。就好像在字典里查“自”这个字下的两个词语“自己”、“自发”,如果用 equals()
判断查询的词语相等那么就是同一个词语,比如 equals()比较的两个词语都是“自己”,那
么此时 hashCode()方法得到的值也肯定相等;如果用 equals()方法比较的是“自己”和“自
发”这两个词语,那么得到结果是不想等,但是这两个词都属于“自”这个字下的词语所以在
查索引时相同,即:hashCode()相同。如果用 equals()比较的是“自己”和“他们”这两个词
语的话那么得到的结果也是不同的,此时 hashCode() 得到也是不同的。
反过来:hashcode()不等,一定能推出 equals()也不等;hashcode()相等,equals()
可能相等,也可能不等。在 object 类中,hashcode()方法是本地方法,返回的是对象的地
址值,而 object 类中的 equals()方法比较的也是两个对象的地址值,如果 equals()相等,
说明两个对象地址值也相等,当然 hashcode() 也就相等了;
同时 hash 算法对于查找元素提供了很高的效率
如果想查找一个集合中是否包含有某个对象,大概的程序代码怎样写呢?
你通常是逐一取出每个元素与要查找的对象进行比较,当发现某个元素与要查找的对象进
行 equals 方法比较的结果相等时,则停止继续查找并返回肯定的信息,否则,返回否定的
信息,如果一个集合中有很多个元素,比如有一万个元素,并且没有包含要查找的对象时,
则意味着你的程序需要从集合中取出一万个元素进行逐一比较才能得到结论。
有人发明了一种哈希算法来提高从集合中查找元素的效率,这种方式将集合分成若干个存
储区域,每个对象可以计算出一个哈希码,可以将哈希码分组(使用不同的 hash 函数来计
算的),每组分别对应某个存储区域,根据一个对象的哈希吗就可以确定该对象应该存储在
哪个区域 HashSet 就是采用哈希算法存取对象的集合,它内部采用对某个数字 n 进行取余
田仲政
- 粉丝: 15
- 资源: 332
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0